आपने जो कुछ SUBSTITUTETHISभी किया है, वह फ़ाइल में दिखाई देने वाली जगह को हटाने के लिए है (लेकिन शेष पंक्ति नहीं है जहाँ वह दिखाई देती है) और temp.TXTउस पंक्ति के नीचे की सामग्री डालें । यदि SUBSTITUTETHISएक पंक्ति में कई बार दिखाई देता है, तो केवल पहली घटना को हटा दिया जाता है, और केवल एक प्रति temp.TXTजोड़ी जाती है।
यदि आप SUBSTITUTETHISप्रकट होने पर पूरी पंक्ति को बदलना चाहते हैं , तो dकमांड का उपयोग करें । चूँकि आपको दोनों को चलाने की आवश्यकता है rऔर dजब कोई मैच होगा, तो उन्हें एक लटके हुए समूह में रखें।
sed -e '/SUBSTITUTETHIS/ {' -e 'r temp.TXT' -e 'd' -e '}' -i devel.txt
कुछ sed कार्यान्वयन आप अर्धविराम का उपयोग कमांड को अलग करने के लिए करते हैं और विभाजकों को ब्रेसिज़ के चारों ओर पूरी तरह से छोड़ देते हैं, लेकिन rकमांड को तर्क को समाप्त करने के लिए आपको अभी भी एक नई पंक्ति की आवश्यकता है :
sed -e '/SUBSTITUTETHIS/ {r temp.TXT
d}' -i devel.txt
यदि आप SUBSTITUTETHISफ़ाइल की सामग्री को बदलना चाहते हैं , लेकिन लाइन पर पहले और बाद में जो आता है उसे बनाए रखें, यह अधिक जटिल है। सबसे सरल विधि फ़ाइल की सामग्री को sed कमांड में शामिल करना है; ध्यान दें कि आपको इसकी सामग्री को ठीक से उद्धृत करना होगा।
sed -e "s/SUBSTITUTETHIS/$(<temp.TXT sed -e 's/[\&/]/\\&/g' -e 's/$/\\n/' | tr -d '\n')/g" -i devel.txt
या पर्ल का उपयोग करें। यह छोटा है लेकिन catप्रत्येक प्रतिस्थापन के लिए एक बार चलता है :
perl -pe 's/SUBSTITUTETHIS/`cat temp.TXT`/ge' -i devel.txt
स्क्रिप्ट शुरू होने पर फ़ाइल को एक बार पढ़ने के लिए, और शेल कमांड के आधार पर बचें:
perl -MFile::Slurp -pe 'BEGIN {$r = read_file("temp.TXT"); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt
(पठनीयता के लिए दो पंक्तियों पर प्रस्तुत किया गया लेकिन आप पंक्ति विराम को छोड़ सकते हैं)। यदि फ़ाइल नाम परिवर्तनशील है, तो मुद्दों को उद्धृत करने से बचने के लिए, इसे पर्यावरण चर के माध्यम से स्क्रिप्ट में पास करें:
replacement_file=temp.TXT perl -MFile::Slurp -pe 'BEGIN {$r = read_file($replacement_file); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt