Usando 'sed' para localizar e substituir [duplicado]

253

Eu sei que esta pergunta provavelmente já foi respondida antes. Eu tenho visto muitos tópicos sobre isso em vários lugares, mas as respostas são geralmente difíceis de extrair para mim. Estou procurando ajuda com um exemplo de uso do comando 'sed'.

Digamos que eu queira agir sobre o arquivo "hello.txt" (no mesmo diretório que o prompt). Em qualquer lugar que contivesse a frase "poucos", deveria ser mudado para "asd". Como seria o comando?

    
por roo 05.10.2014 / 07:25

2 respostas

493

sed é a s tream ed itor , em que você pode usar | (pipe) para enviar streams padrão (STDIN e STDOUT especificamente) através de sed e alterá-los programaticamente no voar, tornando-se uma ferramenta útil na tradição da filosofia Unix; mas também pode editar arquivos diretamente, usando o parâmetro -i mencionado abaixo.
Considere o seguinte :

sed -i -e 's/few/asd/g' hello.txt

s/ é usado para s ubstitute a expressão encontrada few com asd :

The few, the brave.


The asd, the brave.

/g significa "global", significando fazer isso para toda a linha. Se você deixar de fora o /g (com s/few/asd/ , sempre precisará ter três barras, não importa o que) e few aparecer duas vezes na mesma linha, somente o primeiro few será alterado para asd :

The few men, the few women, the brave.


The asd men, the few women, the brave.

Isso é útil em algumas circunstâncias, como alterar caracteres especiais no início das linhas (por exemplo, substituir os símbolos de maior que algumas pessoas usam para citar material anterior em encadeamentos de e-mail com uma guia horizontal, deixando uma inequação algébrica mais tarde na linha intocada), mas no seu exemplo onde você especifica que em qualquer lugar few ocorre, ele deve ser substituído, certifique-se de ter esse /g .

As duas opções a seguir (sinalizadores) são combinadas em uma só, -ie :

A opção

-i é usada para editar i n place no arquivo hello.txt .

A opção

-e indica o comando e xpression / a executar, neste caso s/ .

Nota: é importante que você use -i -e para pesquisar / substituir. Se você usar -ie , crie um backup de todos os arquivos com a letra 'e' anexada.

    
por 05.10.2014 / 07:36
57
sed -i 's/fea/asd/g'  hello.txt

g: Global

s: substituto

-i : o tempo real funciona com o arquivo inplace

    
por 05.10.2014 / 07:38