Grep: pesquise e substitua a linha completa


13

O comando

 grep "foo" myfile.txt

imprime todas as linhas correspondentes no meu arquivo.

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

Respostas:


13

Se você estiver combinando uma substring de toda a linha, poderá usar o scomando sed's com uma regex para limpar o restante da linha:

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

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

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

Se você não quiser digitar comandos com várias linhas no prompt, poderá inseri-lo em um script:

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

$ sed -i -f foo.sed myfile.txt

obrigado! Quando eu uso a segunda opção, recebo: sed: -e expressão # 1, char 0: unmatched `{'
clamp

no final da primeira linha, você precisa digitar \ e depois pressionar Retornar - é importante que \ escape dessa primeira nova linha. Em seguida, verifique se }'está em uma linha separada de another string: a substituição é tudo nessa segunda linha, incluindo a }que você colocou lá.
Inútil

-1

Você pode usar a funcionalidade local do sed :

sed -i -e 's/foo/bar/' myfile.txt

Isso só vai substituir todas as foocom barnão toda a linha ..
Jahid
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.