आपने जो कुछ 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