जवाबों:
मुझे लगता है कि आप देख रहे हैं -i
:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
उदाहरण के लिए:
$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld
यदि आप एक प्रत्यय प्रदान करते हैं, तो यह एक बैकअप फ़ाइल बनाएगा:
$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt
$ ls
foo.txt foo.txt.bak
इनपुट फ़ाइल को संशोधित किया जाता है और मूल फ़ाइल डेटा युक्त बैकअप बनाया जाता है।
यह भी ध्यान दें कि यह जीएनयू के लिए है sed
, विभिन्न कार्यान्वयनों के बीच प्रारूप में मामूली अंतर हैं sed
।
sed
इन-प्लेस संपादन नहीं करता है। यह एक नई फ़ाइल बनाता है और पुराने को अधिलेखित करता है, इनोड बदलता है।
{ rm file; cmd > file; } < file
इस निष्कर्ष की ओर ले जाएंगे कि सीएमडी उसी फ़ाइल को पढ़ता और लिखता है, जो ऐसा नहीं करता है। यह दो डिस्टेंस फाइल है जो सिर्फ एक ही नाम के होते हैं। लेकिन मैं यहां चर्चा शुरू नहीं करना चाहता।
sed: 1: "foo.txt": invalid command code f
दौड़ते समय मिलता हूँ sed -i 's/o/X/g' foo.txt
। हालांकि, एक विस्तार प्रदान करना, sed -i .bak 's/o/X/g' foo.txt
ठीक काम करता है। किसी भी विचार कैसे बैकअप फ़ाइलों को बनाने के बिना इसे प्राप्त करने के लिए?
sed -i '' 's/o/X/g' foo.txt
ये समाधान 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
विकल्प कई sed
कमांड निष्पादित करने के लिए है
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
पर विचार file.txt
के रूप में
linux os
तब ओ / पी है
unix os
-i
विकल्प स्थायी रूप से परिवर्तन सहेजता है ...
-e
झंडा अभिव्यक्ति के लिए खड़ा है। आप शायद-i
झंडा चाहते हैं जिसका मतलब हैin-place
और मैं दृढ़ता से आपको उपयोग करने की सलाह देता हूंsed -i.bak 's/../' filename