Jawaban:
Saya pikir Anda mencari -i
:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
Sebagai contoh:
$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld
Jika Anda memberikan akhiran, itu akan membuat file cadangan:
$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt
$ ls
foo.txt foo.txt.bak
File input dimodifikasi dan cadangan yang berisi data file asli dibuat.
Perhatikan juga bahwa ini untuk GNU sed
, ada sedikit perbedaan dalam format antara sed
implementasi yang berbeda .
sed
tidak melakukan pengeditan di tempat. Ini menciptakan file baru dan menimpa yang lama, perubahan inode.
{ rm file; cmd > file; } < file
akan mengarah pada kesimpulan bahwa cmd membaca dan menulis ke file yang sama, yang tidak. Ada dua file berbeda yang kebetulan memiliki nama yang sama. Tetapi saya tidak ingin memulai diskusi di sini.
sed: 1: "foo.txt": invalid command code f
ketika menjalankan sed -i 's/o/X/g' foo.txt
. Namun, memberikan ekstensi, seperti sed -i .bak 's/o/X/g' foo.txt
berfungsi dengan baik. Ada ide bagaimana membuatnya bekerja tanpa membuat file cadangan?
sed -i '' 's/o/X/g' foo.txt
Solusi ini berfungsi untuk 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
opsi untuk mengeksekusi banyak sed
perintah
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
pertimbangkan file.txt
sebagai
linux os
maka O / P adalah
unix os
-i
opsi menyimpan perubahan secara permanen ...
-e
bendera singkatan ekspresi. Anda mungkin menginginkan-i
bendera yang artinyain-place
dan saya sangat menyarankan Anda untuk menggunakansed -i.bak 's/../' filename