मैं एक फ़ाइल में एक विशिष्ट लाइन पर एक शब्द को बदलने की कोशिश कर रहा हूं, लेकिन मुझे सभी को एक साथ जोड़ने में थोड़ी परेशानी हो रही है।
असल में, मेरी फाइल में एक लाइन पर एक कीवर्ड 'फर्मवेयर_रीविजन' है, और इस लाइन पर (और केवल यही लाइन) मैं 'टेस्ट' शब्द को 'प्रोडक्शन' शब्द से बदलना चाहता हूं।
तो मैं यह कर सकता हूँ:
grep 'firmware_revision' myfile.py | sed 's/test/production'
यह वह लाइन चुन लेगा जिसे मैं चाहता हूं और प्रतिस्थापन का प्रदर्शन करता हूं, लेकिन मैं यह पता नहीं लगा सकता कि पुरानी लाइन को बदलने के लिए इस नई लाइन को मूल फ़ाइल में कैसे लाया जाए। मैं स्पष्ट रूप से इसे केवल फ़ाइल पर वापस नहीं भेज सकता, इसलिए मुझे क्या करना चाहिए?
यहां तक कि अगर मैं अस्थायी grep
लाइन का उपयोग करता हूं, तो मुझे केवल उस लाइन को प्राप्त करने के लिए उपयोग करने की आवश्यकता है जो मुझे फ़ाइल में अन्य डेटा खो देता है, इसलिए मैं अब इसे केवल एक अस्थायी फ़ाइल पर पुनर्निर्देशित नहीं कर सकता हूं, फिर मूल को अस्थायी के साथ बदल दें।
संपादित करें - किसी ने अधिक जानकारी मांगी
कहते हैं, मेरे पास इस तरह की लाइनों से भरी एक फाइल है
[
('key_name1', str, 'value1', 'Description'),
('key_name2', str, 'value2', 'Description'),
('key_name3', str, 'value3', 'Description'),
('firmware_revision', str, 'my-firmware-name-test', 'Firmware revision name')
]
अब मैं एक स्क्रिप्ट लिखना चाहता हूं (आदर्श रूप से एक-लाइनर) जिसमें वह लाइन मिल जाएगी जिसमें 'फर्मवेयर_रीविजन' है, और उस लाइन पर 'टेस्ट' शब्द के सभी उदाहरणों को 'प्रोडक्शन' में बदल देता है। 'परीक्षण' शब्द उस फ़ाइल में अन्य स्थानों पर हो सकता है और मैं नहीं चाहता कि वे बदले। तो स्पष्ट होने के लिए, मैं उपरोक्त लाइन को बदलना चाहता हूं
('firmware_revision', str, 'my-firmware-name-production', 'Firmware revision name')
मैं यह कैसे करु?
sed -i.bak '/firmware_revision/ s/test/production/' myfile.py
sed
बहुत शक्तिशाली है, यह दोनों कार्यों (grep
और प्रतिस्थापन) का प्रदर्शन कर सकता है लेकिन हमें इस बारे में अधिक जानकारी की आवश्यकता होगी कि रेखा आपकी मदद कैसे करती है।