Yanıtlar:
Bence aradığınızı düşünüyorum -i
:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
Örneğin:
$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld
Bir sonek sağlarsanız, bir yedekleme dosyası oluşturur:
$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt
$ ls
foo.txt foo.txt.bak
Giriş dosyası değiştirilmiş ve orijinal dosya verilerini içeren bir yedekleme oluşturulmuştur.
Ayrıca, bu GNU için olduğuna dikkat sed
vardır, küçük farklar farklı arasındaki biçiminde sed
uygulamaları.
sed
yerinde düzenleme yapmaz. Yeni bir dosya oluşturur ve eskisinin üzerine yazar, inode değişir.
{ rm file; cmd > file; } < file
okuduğu ve aynı dosyaya yazdığı sonucuna yol açacaktır. Aynı adı taşıyan iki farklı dosya. Fakat burada bir tartışma başlatmak istemiyorum.
sed: 1: "foo.txt": invalid command code f
çalışırken alırım sed -i 's/o/X/g' foo.txt
. Ancak, bir uzantı sağlamak gibi, sed -i .bak 's/o/X/g' foo.txt
iyi çalışıyor. Yedek dosyaları oluşturmadan nasıl çalışacağını bilen var mı?
sed -i '' 's/o/X/g' foo.txt
Bu çözüm HPUX (UNIX) için çalışıyor:
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
seçenek birden fazla sed
komut çalıştırmak içindir
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
dikkate file.txt
olarak
linux os
o zaman O / P
unix os
-i
seçenek kalıcı olarak değişiklikleri kaydeder ...
-e
Bayrak ekspresyonu ifade eder. Muhtemelen bu-i
bayraklarıin-place
istiyorsunuz ve kullanmanızı şiddetle tavsiye ediyorumsed -i.bak 's/../' filename