remove todos os espaços do campo específico separados por vírgula

1

Entrada:

11 22 33 44,1 2,2

Resultado

11223344,1 2,2

Estou tentando remover todos os espaços no campo 1 , que é anterior ao primeiro comma .

    
por αԋɱҽԃ αмєяιcαη 07.10.2018 / 23:05

1 resposta

3

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.

    
por 07.10.2018 / 23:28