Odpowiedzi:
Myślę, że szukasz -i:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
Na przykład:
$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld
Jeśli podasz sufiks, utworzy plik kopii zapasowej:
$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt
$ ls
foo.txt foo.txt.bak
Plik wejściowy jest modyfikowany i tworzona jest kopia zapasowa zawierająca oryginalne dane pliku.
Zauważ też, że dotyczy to GNU sed, istnieją niewielkie różnice w formacie między różnymi sedimplementacjami.
sednie wykonuje edycji na miejscu. Tworzy nowy plik i zastępuje stary, zmienia się i-węzeł.
{ rm file; cmd > file; } < filedoprowadziłyby do wniosku, że cmd czyta i zapisuje do tego samego pliku, czego nie robi. To dwa odrębne pliki, które akurat mają taką samą nazwę. Ale nie chcę tutaj rozmawiać.
sed: 1: "foo.txt": invalid command code fgdy jestem uruchomiony sed -i 's/o/X/g' foo.txt. Jednak zapewnienie rozszerzenia, podobnie jak sed -i .bak 's/o/X/g' foo.txtdziała dobrze. Wszelkie pomysły, jak to zrobić bez tworzenia plików kopii zapasowych?
sed -i '' 's/o/X/g' foo.txt
To rozwiązanie działa w przypadku 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
-eopcja służy do wykonywania wielu sedpoleceń
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
uznać file.txtza
linux os
wtedy O / P jest
unix os
-i opcja zapisuje zmiany na stałe ...
-eFlaga oznacza wyrażenie. Prawdopodobnie chcesz-iflagi, co oznaczain-placei zdecydowanie zalecamy jej użyciesed -i.bak 's/../' filename