
Eu sei que esta pergunta provavelmente já foi respondida antes. Já vi muitos tópicos sobre isso em vários lugares, mas as respostas geralmente são difíceis de extrair para mim. Estou procurando ajuda com um exemplo de uso do comando 'sed'.
Digamos que eu queira agir de acordo com o arquivo "hello.txt" (no mesmo diretório do prompt). Em qualquer lugar que contivesse a frase "poucos", ela deveria ser alterada para "asd". Como seria o comando?
Responder1
sed
é oéfluxoEditor, em que você pode usar |
(pipe) para enviarfluxos padrão(STDIN e STDOUT especificamente) sed
e altere-os programaticamente em tempo real, tornando-o uma ferramenta útil na tradição da filosofia Unix; mas também pode editar arquivos diretamente, usando o -i
parâmetro mencionado abaixo.
Considere o seguinte:
sed -i -e 's/few/asd/g' hello.txt
s/
é usado paraésubstitua a expressão encontrada few
por asd
:
Os poucos, os corajosos.
O asd, o corajoso.
/g
significa "global", ou seja, fazer isso para toda a linha. Se você deixar de fora /g
(com s/few/asd/
, sempre será necessário haver três barras, não importa o que aconteça) e few
aparecer duas vezes na mesma linha, apenas a primeira few
será alterada para asd
:
Os poucos homens, as poucas mulheres, os corajosos.
Os homens ávidos, as poucas mulheres, os corajosos.
Isto é útil em algumas circunstâncias, como alterar caracteres especiais no início das linhas (por exemplo, substituir os símbolos de maior que que algumas pessoas usam para citar material anterior em tópicos de e-mail por uma tabulação horizontal, deixando uma desigualdade algébrica citada mais tarde na linha intocado), mas no seu exemplo onde você especifica issoem qualquer lugar few
ocorrer, ele deve ser substituído, certifique-se de ter isso /g
.
As duas opções (sinalizadores) a seguir são combinadas em uma -ie
:
-i
opção é usada para editareun coloque no arquivo hello.txt
.
-e
opção indica oexpression/command a ser executado, neste caso s/
.
Nota: É importante que você use -i -e
para pesquisar/substituir. Se fizer isso -ie
, você criará um backup de cada arquivo com a letra 'e' anexada.
Responder2
sed -i 's/fea/asd/g' hello.txt
g:Global
é:substituto
-eu: tempo real funciona com arquivono lugar