Apakah ini mungkin? Saya membaca di suatu tempat bahwa perintah berikut akan melakukannya:
sed -e [command] [file]
tetapi tampaknya melakukan hal yang sama dengan adil
sed [perintah] [file]
(itu tidak menyimpan perubahan). Apakah ada cara untuk melakukan ini dengan menggunakan sed?
-e
bendera singkatan ekspresi. Anda mungkin menginginkan-i
bendera yang artinyain-place
dan saya sangat menyarankan Anda untuk menggunakansed -i.bak 's/../' filename
Jawaban:
Saya pikir Anda mencari
-i
:Sebagai contoh:
Jika Anda memberikan akhiran, itu akan membuat file cadangan:
File input dimodifikasi dan cadangan yang berisi data file asli dibuat.
Perhatikan juga bahwa ini untuk GNU
sed
, ada sedikit perbedaan dalam format antarased
implementasi yang berbeda .sumber
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 menjalankansed -i 's/o/X/g' foo.txt
. Namun, memberikan ekstensi, sepertised -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
sumber
-e
opsi untuk mengeksekusi banyaksed
perintahpertimbangkan
file.txt
sebagaimaka O / P adalah
-i
opsi menyimpan perubahan secara permanen ...sumber