लाइन नंबर के आधार पर स्ट्रिंग को बदलना


50

मेरे पास एक ऐसी स्थिति है जहां मैं कई फाइलों में एक विशेष स्ट्रिंग को बदलना चाहता हूं

एक स्ट्रिंग AAA को दूसरे स्ट्रिंग BBB से बदलें लेकिन AAA के साथ शुरू होने वाले या AAA में समाप्त होने वाले बहुत सारे तार हैं, और मैं लाइन 34 पर केवल एक को बदलना चाहता हूं और दूसरों को अक्षुण्ण रखना चाहता हूं।

क्या लाइन नंबर द्वारा निर्दिष्ट करना संभव है, सभी फाइलों पर यह स्ट्रिंग बिल्कुल 34 वीं पंक्ति पर है।

जवाबों:


82

आप awk में sed या NR (रिकॉर्ड की संख्या) में लाइन नंबर निर्दिष्ट कर सकते हैं।

awk 'NR==34 { sub("AAA", "BBB") }'

या यदि आप कमांड लाइन पर एक से अधिक फ़ाइल निर्दिष्ट करना चाहते हैं तो FNR (फाइल नंबर रिकॉर्ड) का उपयोग करें।

awk 'FNR==34 { sub("AAA", "BBB") }'

या

sed '34s/AAA/BBB/'

इन-प्लेस रिप्लेसमेंट को सेड के साथ करना

sed -i '34s/AAA/BBB/' file_name

-3

मान लीजिए कि आप file_record में तीसरी पंक्ति को बदलना चाहते हैं:

sed -i "s/`head -3 file_record | tail -1 `/replaced/" file_record

सिर से पहले और -1 के बाद वापस बोली का उपयोग करें ... यहाँ यह नहीं ले रहा है
RAMAN

1
यह सिर्फ काम नहीं कर रहा है। इसके लिए कुछ भारी शुल्क से बचने की जरूरत है। और अगर तीसरी पंक्ति कहीं और दोहराई जाती है तो क्या होगा?
स्पार्कहॉक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.