जवाबों:
मुझे लगता है कि आप देख रहे हैं -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