Risposte:
Penso che tu stia cercando -i
:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
Per esempio:
$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld
Se si fornisce un suffisso, verrà creato un file di backup:
$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt
$ ls
foo.txt foo.txt.bak
Il file di input viene modificato e viene creato un backup contenente i dati del file originale.
Si noti inoltre che questo è per GNU sed
, ci sono lievi differenze di formato tra le diverse sed
implementazioni.
sed
non esegue modifiche sul posto. Crea un nuovo file e sovrascrive quello vecchio, l'inode cambia.
{ rm file; cmd > file; } < file
porterebbero alla conclusione che cmd legge e scrive nello stesso file, cosa che non accade. Sono due file distinti che hanno lo stesso nome. Ma non voglio iniziare una discussione qui.
sed: 1: "foo.txt": invalid command code f
quando corro sed -i 's/o/X/g' foo.txt
. Tuttavia, fornendo un'estensione, come sed -i .bak 's/o/X/g' foo.txt
funziona benissimo. Qualche idea su come farlo funzionare senza creare file di backup?
sed -i '' 's/o/X/g' foo.txt
Queste soluzioni funzionano per 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
opzione è per l'esecuzione di più sed
comandi
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
considerare file.txt
come
linux os
allora O / P è
unix os
-i
L'opzione salva le modifiche in modo permanente ...
-e
bandiera sta per espressione. Probabilmente vuoi la-i
bandiera, il che significain-place
che ti consiglio vivamente di usaresed -i.bak 's/../' filename