Como posso obter meu comando sed para fazer alterações permanentes em um arquivo?

24

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

sed -e [command] [file]

mas parece que faz o mesmo que

sed [command] [file]

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

    
por John 13.10.2013 / 21:33

3 respostas

38

Acho que você está procurando por -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, ele criará um arquivo de backup:

$ 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, há pequenas diferenças no formato entre diferentes sed de implementações.

    
por 13.10.2013 / 21:43
1

Essa solução funciona para o 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

    
por 28.10.2014 / 03:05
0
A opção

-e é para executar vários comandos sed

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

considere file.txt como

linux os

então O / P é

unix os
A opção

-i salva as alterações permanentemente ...

    
por 16.10.2016 / 07:33

Tags