Como acrescentar uma string no final de todas as linhas?

5

Estou tentando adicionar uma string no final de todas as linhas em um arquivo de texto, mas tenho um erro em algum lugar.

Exemplo:

Eu tenho isso em um arquivo de texto:

begin--fr.a2dfp.net
begin--m.fr.a2dfp.net
begin--mfr.a2dfp.net
begin--ad.a8.net
begin--asy.a8ww.net
begin--abcstats.com
...

Eu corro:

sed -i "s|\x0D$|--end|" file.txt

E eu recebo:

begin--fr.a2dfp.net--end
begin--m.fr.a2dfp.net--end
begin--mfr.a2dfp.net--end
begin--ad.a8.net
begin--asy.a8ww.net--end
begin--abcstats.com
...

A string é adicionada apenas em certas linhas e não em outras.

Alguma ideia do porquê?

    
por rkifo 30.01.2014 / 18:29

3 respostas

10

\x0D é o retorno de carro, que pode ou não estar visível em seu editor de texto. Então, se você editou o arquivo no Windows e em um sistema Unix / Linux, pode haver uma mistura de novas linhas. Se você deseja remover retornos de carro de forma confiável, use dos2unix . Se você realmente quiser adicionar texto ao final da linha, use apenas sed -i "s|$|--end|" file.txt .

    
por 30.01.2014 / 18:33
4

Existem maneiras de fazer isso:

  1. Perl

    perl -i -pe 's/$/--end/' file.txt
    
  2. sed

    sed -i 's/$/--end/' file.txt
    
  3. awk

    awk '{$NF=$NF"--end"; print}' file.txt > foo && mv foo file.txt
    
  4. shell

    while IFS= read -r l; do 
     echo "$l""--end"; 
    done < file.txt > foo && mv foo file.txt
    
por 30.01.2014 / 19:12
0

Você pode tentar usar ex :

ex +"%s/$/--end/g" -cwq foo.txt 

que é equivalente a vi -e .

A opção -i não é totalmente compatível entre o Linux e o Unix e pode não estar disponível em outros sistemas operacionais.

    
por 25.05.2015 / 14:33