Eliminar vírgulas à direita na linha

7

Como faço para excluir um conjunto de vírgulas à direita no bash:

a,b,c,d,,,,
1,2,3,,,,

Saída desejada:

a,b,c,d
1,2,3

Tentei fazer isso:

 grep "5628" test.csv | sed 's/,*$//g'

mas não funciona. O arquivo originalmente veio de uma máquina Windows.

    
por user2980702 03.08.2015 / 17:26

2 respostas

10

Re o comando que você forneceu:

grep "5628" test.csv | sed 's/,*$//g'

Isto produzirá linhas correspondentes a '5628' com todas as vírgulas à direita removidas. Não atualizará o arquivo test.csv .

No entanto, você indicou que o arquivo veio de uma máquina Windows, portanto, os finais de linha são CR / NL, e não apenas NL. O resultado é que há um CR oculto no final da linha e, em vez disso, você precisa de uma linha de comando:

grep "5628" test.csv | sed 's/,*\r*$//'

Na verdade, você pode simplesmente fazer isso em um comando:

sed -n '/5628/s/,*\r*$//p' test.csv
    
por 03.08.2015 / 17:35
2
sed -n '/5628/ s/,*\r*$//p' test.csv

(não o OP que só pede para retirar o coma à direita) isso evita um processo de tubulação, levando diretamente o filtro e a conversão

    
por 07.08.2015 / 10:56

Tags