Comentários
- tldp.org/LDP/abs/html/x23170.html
- grymoire.com/Unix/Sed.html
- Isso não deve ser marcado como uma duplicata porque a outra resposta referenciada não ' t mostra como substituir em um único arquivo, enquanto esta resposta mostra. Isso ou integre esta resposta a outra
Resposta
sed
é o s tream ed itor , em que você pode usar |
(pipe) para enviar fluxos padrão (STDIN e STDOUT especificamente) por meio de sed
e alterá-los programaticamente em tempo real, 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
:
Os poucos, os bravos.
O asd , o bravo.
/g
significa “global”, o que significa fazer isso para toda a linha. Se você deixar de fora /g
(com s/few/asd/
, sempre deve haver três barras, não importa o que aconteça) e few
aparece duas vezes na mesma linha, apenas o primeiro few
é alterado para asd
:
Os poucos homens, as poucas mulheres, os bravos.
Os homens ASD, as poucas mulheres, os bravos.
Isso é útil em algumas circunstâncias, como alterar caracteres especiais no início das linhas (por exemplo, substituir os símbolos maior que algumas pessoas usam para citar material anterior em tópicos de e-mail com uma guia horizontal, deixando uma desigualdade algébrica citada posteriormente na linha intacta), mas em seu exemplo em que você especifica que em qualquer lugar few
ocorre, deve ser substituído , certifique-se de ter /g
.
As duas opções a seguir (sinalizadores) são combinadas em uma, :
-i
a opção é usada para editar i n lugar no arquivo hello.txt
.
-e
opção indica a opção e xpression / comando a ser executado, neste caso s/
.
Observação: é importante que você use -i -e
para pesquisar / substituir. Se você fizer -ie
, criará um backup de cada arquivo com a letra “e” anexada.
Comentários
- Eu ' m usando OS X, pelo que vale ', mas este é o erro que recebo: sed: 1: " hello.txt ": código de comando inválido.
- Uma edição foi proposta para adicionar o -e sinalizar para sed. O sinalizador -e é opcional, desde que o comando a ser executado apareça primeiro, não haja um arquivo de comando e um comando arg, e haja apenas um comando.
- @roo no mac os x, usando
-ie
Recebo esse arquivofoo
é editado comofooe
. - este comando me dá um arquivo extra terminando com -e, por quê ??: index.html-e sed -i -e ' s / n / d / g ' index.html
- No Mac, -i -e cria um novo arquivo com -e anexado ao nome. Isso parece funcionar em bash: sed " -i " " " " -e " " s / few / asd / g " " algumarquivo.xml "
Resposta
sed -i "s/fea/asd/g" hello.txt
g: Global
s: substituto
-i : o tempo real funciona com arquivo inplace
Comentários
- Ao lidar com links simbólicos, é bom adicionar
--follow-symlinks
do contrário,-i
transformará o link simbólico em uma cópia (editada) do arquivo.