आप जो चाहते हैं, वह करना संभव नहीं है sed। यहां तक sedकि उस संस्करण के संस्करण भी -iएक फ़ाइल को संपादित करने के विकल्प का समर्थन करते हैं जो आपने स्पष्ट रूप से कहा है कि आप नहीं चाहते हैं: वे एक अस्थायी फ़ाइल पर लिखते हैं और फिर फ़ाइल का नाम बदलते हैं। लेकिन शायद आप सिर्फ उपयोग कर सकते हैं ed। उदाहरण के लिए, फ़ाइल में होने वाली सभी घटनाओं को बदलने के fooलिए , आप यह कर सकते हैं:barfile.txt
echo ',s/foo/bar/g; w' | tr \; '\012' | ed -s file.txt
सिंटेक्स के समान है sed, लेकिन निश्चित रूप से बिल्कुल समान नहीं है।
लेकिन शायद आपको इस बात पर विचार करना चाहिए कि आप एक नामांकित अस्थायी फ़ाइल का उपयोग क्यों नहीं करना चाहते। यहां तक कि अगर आपके पास एक -iसहायक नहीं है sed, तो आप आसानी से आपके लिए काम करने के लिए एक स्क्रिप्ट लिख सकते हैं। इसके बजाय sed -i 's/foo/bar/g' file, आप कर सकते थे inline file sed 's/foo/bar/g'। ऐसी पटकथा लिखने के लिए तुच्छ है। उदाहरण के लिए:
#!/bin/sh -e
IN=$1
shift
trap 'rm -f $tmp' 0
tmp=$( mktemp )
<$IN "$@" >$tmp && cat $tmp > $IN # preserve hard links
अधिकांश उपयोगों के लिए पर्याप्त होना चाहिए।
-iग्नू सेड में एक विकल्प है, लेकिन मानक सेड में नहीं है। हालाँकि, यह सामग्री को एक नई फ़ाइल में स्ट्रीम करता है और फिर फ़ाइल का नाम बदल देता है, इसलिए यह वह नहीं है जो आप चाहते हैं।