Com o GNU sed
, você pode conseguir isso com um único comando:
sed -i "s/alma//g" f1
-i
edita o arquivo no lugar.
Para BSD sed
, por ex. no OS X, as opções são diferentes: você precisa de sed -i '' 's/alma//g' f1
.
Estou tentando excluir todas as ocorrências de uma palavra em um arquivo de texto com sed. Eu tenho esse arquivo f1:
alma a fa
alatt
nyari piros alma
e gostaria de excluir todas as ocorrências de "alma". Eu uso o seguinte em um script .sh:
a='sed "s/alma//g" $ file'; echo -e $a | cat > $file
onde $file
contém o nome desse arquivo de texto que acabei de escrever antes. O problema é que o sed não leva em conta o avanço de linha e meu novo arquivo f1 tem esta aparência:
a fa alatt nyari piros.
Então tudo está escrito em uma única linha, no entanto, eu gostaria de preservar a forma original da f1 com linhas separadas.
Como eu pude fazer isso?
Você perdeu as citações.
a=$(sed "s/alma//g" $file);
printf %b "$a" > $file
Você deve sempre usar aspas em torno da expansão de parâmetros, a menos que você saiba o que está fazendo.
No entanto, acho que o one-liner do parkydr é mais legível.