A solução sed
do GNU precisa de -i
para edição in-line:
sed -i 's/$/ 1/' file.txt
(Com BSD sed
, você precisa de sed -i ''
)
Em awk
, você precisa contornar isso com um arquivo temporário:
awk '{ print $0 " 1" }' file.txt > tmp && mv tmp file.txt
Na verdade, sed
também cria um arquivo temporário, mas -i
lida com isso
O problema com awk '{ print $0 " 1" }' < file.txt > file.txt
:
Os redirecionamentos foram realizados antes de awk
obter o controle. > file.txt
truncará o arquivo. Tente em um terminal:
>file
O file
será de tamanho zero, mesmo se antes o arquivo tivesse conteúdo. Portanto, awk
não possui dados para ler desse arquivo. Esse é o mesmo problema que com sed
.
Solução final com \r
quebras de linha:
perl -pi -e 's/\r\n|\n|\r/ 1\n/g' file.txt