Como excluo 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 veio originalmente de uma máquina Windows.
sed
que você mostrou, sem um nome de arquivo funciona como um filtro e não processa um arquivo no lugar )dos2unix
algo assim .Respostas:
Re o comando que você forneceu:
Isso 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, as terminações de linha são CR / NL em vez de apenas NL. O resultado é que há um CR oculto no final da linha e você precisa de uma linha de comando:
Na verdade, você pode simplesmente fazer isso em um comando:
fonte
\r*
permite zero ou mais caracteres CR (portanto continuará funcionando com arquivos derivados do Unix / Linux). Eu preferiria usar\r?
para indicar um único CR opcional, mas não conseguia me lembrar da bandeirased
para dizer para usar EREs no topo da minha cabeça. Eu acho que não é-r
testado aqui. O,*
é seu e corresponde a zero ou mais vírgulas.g
não é necessário, neste caso, ter apenas 1 final especificado pelo$
(não o OP que pede apenas para remover o coma à direita), isso evita um processo de tubulação, pois leva diretamente o filtro e a conversão
fonte