Substituir o novo caractere de linha por um pipe e um novo caractere de linha

3

Estou usando ksh .

Eu tenho um arquivo temp.txt com alguns dados delimitados por pipe.

one|two|three|four|five
abc|def|pqr|lmn|xyz

A partir do exemplo, o registro termina com um novo caractere de linha após o valor dos dados na última coluna.

No entanto, quero que o registro termine com um delimitador de pipe e um novo caractere de linha, conforme abaixo:

one|two|three|four|five|
abc|def|pqr|lmn|xyz|

Eu tentei os seguintes comandos, mas ainda sem sucesso:

tr '\n' '|\n' < temp.txt

e

sed -i 's/\n/|\n/g' temp.txt

Estou sentindo falta de algo?

    
por Vicky 12.05.2015 / 16:49

4 respostas

9

A menos que você tenha unido linhas, o \n não aparece no espaço padrão de sed : a âncora de fim de linha é $ .

Então, com o GNU sed:

sed -i 's/$/|/' temp.txt
    
por 12.05.2015 / 16:52
3

Você pode usar paste :

$ :|paste -d'|' file - > new_file
one|two|three|four|five|
abc|def|pqr|lmn|xyz|

ou perl :

perl -i.bak -ple '$_.="|"' file
    
por 12.05.2015 / 16:54
3

Com o GNU sed , você pode substituir o final da linha por | usando:

sed -i 's/$/|/' temp.txt

Isso corresponderá ao final da linha e "substituirá" por | , mas é claro que a linha ainda terminará e manterá seu \n

    
por 12.05.2015 / 16:52
0

Você pode usar o GNU sed :

sed -i 's/.*/&|/' file

O caractere especial & corresponde ao padrão correspondente no RHS.

    
por 13.05.2015 / 04:48