Com sed
, você precisa de um loop:
sed -e :1 -e 's/^\([^,]*\) //;t1'
Ou use o espaço de espera para poder substituir todos os espaços e depois recuperar a parte original da linha:
sed 'h;s/,.*//;s/ //g;G;s/\n[^,]*//'
É mais fácil com awk
:
awk -F, -v OFS=, '{gsub(" ", "", $1); print}'
Ou perl
:
perl -F, -lpe '$F[0] =~ s/ //g; $_ = join ",", @F'
ou:
perl -pe 's{[^,]*}{$& =~ s/ //gr}e'
ou:
perl -pe 's/\G[^, ]*\K //g'
Esse último talvez mereça uma explicação: \G
usa o sinal g
.
As sinalizações g
significam substituir g
lobally e implica um loop em que perl
retoma a pesquisa da próxima ocorrência imediatamente após a anterior.
\G
corresponde a esse local logo após a correspondência anterior, portanto, após o último espaço substituído e na primeira passagem no loop, no início da linha. Como estamos usando [^,]
, não permitimos que o loop ultrapasse a primeira vírgula, portanto, substituindo todos os espaços antes somente dela.