Grep: procura e substitui a linha completa

11

O comando

 grep "foo" myfile.txt

imprime todas as linhas correspondentes no meu arquivo.

Agora quero substituir a linha completa por outra string. Como posso fazer isso?

    
por clamp 23.02.2012 / 17:46

2 respostas

12

Se você corresponder a uma substring de toda a linha, use o comando s do sed com um regex para limpar o restante da linha:

sed -i 's/^.*foo.*$/another string/' myfile.txt

ou use o comando c para substituir a linha correspondente de uma só vez:

sed -i '/foo/ { c \
another string
}' myfile.txt

Se você não quiser digitar comandos de múltiplas linhas no prompt, poderá colocá-lo em um script:

$ cat foo.sed
/foo/ { c \
another string
}

$ sed -i -f foo.sed myfile.txt
    
por 23.02.2012 / 19:10
-1

Você pode usar a funcionalidade inplace de sed :

sed -i -e 's/foo/bar/' myfile.txt
    
por 23.02.2012 / 19:00