Excluindo todas as ocorrências de palavras com sed preservando o avanço de linha

0

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?

    
por Eszter 14.04.2013 / 11:27

2 respostas

3

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 .

    
por 14.04.2013 / 11:36
0

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.

    
por 19.04.2013 / 20:12

Tags