Usando ' sed ' para localizar e substituir [duplicado]

Esta pergunta já tem respostas aqui :

Comentários

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 arquivo foo é editado como fooe.
  • 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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *