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 sed
implementacjami.
sed
nie wykonuje edycji na miejscu. Tworzy nowy plik i zastępuje stary, zmienia się i-węzeł.
{ rm file; cmd > file; } < file
doprowadził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 f
gdy jestem uruchomiony sed -i 's/o/X/g' foo.txt
. Jednak zapewnienie rozszerzenia, podobnie jak sed -i .bak 's/o/X/g' foo.txt
dział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
-e
opcja służy do wykonywania wielu sed
poleceń
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
uznać file.txt
za
linux os
wtedy O / P jest
unix os
-i
opcja zapisuje zmiany na stałe ...
-e
Flaga oznacza wyrażenie. Prawdopodobnie chcesz-i
flagi, co oznaczain-place
i zdecydowanie zalecamy jej użyciesed -i.bak 's/../' filename