Respostas:
Eu 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, 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 este é para o GNU sed
, existem pequenas diferenças no formato entre diferentes sed
implementações.
sed
não faz edição no local. Ele cria um novo arquivo e sobrescreve o antigo, o inode muda.
{ rm file; cmd > file; } < file
levaria à conclusão de que o cmd lê e grava no mesmo arquivo, o que não acontece. São dois arquivos distintos que, por acaso, têm o mesmo nome. Mas não quero iniciar uma discussão aqui.
sed: 1: "foo.txt": invalid command code f
ao executar sed -i 's/o/X/g' foo.txt
. No entanto, fornecer uma extensão, como sed -i .bak 's/o/X/g' foo.txt
funciona bem. Alguma idéia de como fazê-lo funcionar sem criar arquivos de backup?
sed -i '' 's/o/X/g' foo.txt
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
-e
opção é para executar vários sed
comandos
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
considere file.txt
como
linux os
então O / P é
unix os
-i
opção salva as alterações permanentemente ...
-e
bandeira significa expressão. Você provavelmente vai querer a-i
bandeira de que meiosin-place
e eu recomendo fortemente que você usesed -i.bak 's/../' filename