Adicione texto ao final de cada linha

1

Eu tentei muitos comandos, assim:

sed -i '' "s/$/<@string>/" txt.txt > txt2.txt

Isso deixa o txt2.txt vazio, por quê?!?

sed 's/$/<@string>/' txt.txt > txt2.txt

Isso não faz absolutamente nada e me diz que o caminho <string> não existe.

Então, o que eu faço, estou usando o bsd sed porque estou no OS X.

    
por DisplayName 22.08.2014 / 13:52

2 respostas

3

A opção -i faz com que sed edite o arquivo original. Isso significa que não há saída e, como não há saída, o redirecionamento resulta em um arquivo vazio.

Então, o que você quer é

sed -i '' 's/$/<@string>/' txt.txt

que mudará o original txt.txt . Ou apenas

 sed 's/$/<@string>/' txt.txt > txt2.txt
    
por 22.08.2014 / 14:00
0

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

Em segundo lugar, você não pode usar -i e redirecionamento de E / S ( > ) juntos, porque é excluído de si mesmo. Usando a edição no local já modificando o arquivo.

Então, se você quiser editar o arquivo no local (no mesmo arquivo), é melhor usar ex :

ex +"%s/$/<@string>/g" -cwq foo.txt

Para substituir uma string e gravar em outro arquivo, tente:

ex +"%s/$/<@string>/g" +"w another.txt" -cq! foo.txt

O comando ex é equivalente a vi -e .

    
por 25.05.2015 / 14:42