Como posso fazer com que meu comando sed faça alterações permanentes em um arquivo?

Como posso fazer com que meu comando sed faça alterações permanentes em um arquivo?

Isso é possível? Li em algum lugar que o seguinte comando faria isso:

sed -e [comando] [arquivo]

mas parecia fazer a mesma coisa que apenas

sed [comando] [arquivo]

(não salvou as alterações). Existe alguma maneira de fazer isso usando sed?

Responder1

Acho que você está procurando -i:

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)

Por exemplo:

$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld

Se você fornecer um sufixo, um arquivo de backup será criado:

$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt 
$ ls
foo.txt  foo.txt.bak

O arquivo de entrada é modificado e um backup contendo os dados do arquivo original é criado.

Observe também que isso é para GNUsed , existempequenas diferençasno formato entre diferentes sedimplementações.

Responder2

Esta solução funciona para HPUX (UNIX):

1 { rm test1.sh && awk '{gsub("Error", "NO_Error", $0); print}' > test1.sh; } < test1.sh.:

2. perl -pi -e 's/Error/NO_Error/g' test1.sh

3. sed 's/Error/NO_Error/g' test1.sh | tee test1.sh

Responder3

-eopção é para executar vários sedcomandos

sed -e 's/linux/unix/' -e 's/os/OS/' file.txt

considere file.txtcomo

linux os

então O/P é

unix os

-iopção salva as alterações permanentemente...

informação relacionada