Como removo todos os \ r \ n de um arquivo, mas preservo \ n

0

Eu tenho um CSV com finais de linha unix, mas alguns dos valores de string têm finais de linha do Windows neles:

date,notes\n
2014-01-01,"Blah Blah Blah"\n
2014-01-02,"Two things:\r\n  - first thing\r\n  - second thing\n
2014-01-03,"Foo"\n

Note que \ n e mostramos apenas onde os caracteres não imprimíveis estão no arquivo, não é como ficaria se você os abrisse em um editor de texto.

Eu quero remover instâncias de \ r \ n, mas manter os finais de linha reais, onde é apenas \ n. A saída deve ser semelhante a:

date,notes\n
2014-01-01,"Blah Blah Blah"\n
2014-01-02,"Two things:  - first thing  - second thing\n
2014-01-03,"Foo"\n

Eu preciso de algo como tr -d '\r\n' file.csv , mas onde ele exclui a string \r\n , em vez de \r ou \n .

Se eu tentar processá-lo com sed , ele será tratado assim ao processar linha por linha, por isso não funciona:

date,notes
2014-01-01,"Blah Blah Blah"
2014-01-02,"Two things:\r
  - first thing\r
  - second thing
2014-01-03,"Foo"
    
por Dean 22.03.2016 / 19:36

4 respostas

3

Perl lida com seqüências de escape, incluindo \n para newline, um pouco mais abrangente que ferramentas Unix antigas.

perl -pe 's/\r\n//g'
    
por 22.03.2016 / 21:12
1

Você tentou substituir por sed :

sed 's/\r\n//g' -i file.csv
    
por 22.03.2016 / 19:44
0

Você tem que escapar das barras invertidas, ou seja,

tr -d '\r\n' file.csv

deve funcionar.

    
por 22.03.2016 / 19:42
-1

Já pensou em usar dos2unix?

    
por 22.03.2016 / 20:30

Tags