कैसे एक पूरी लाइन को sed के साथ बदलें?


132

मान लीजिए, मेरे पास लाइनों के साथ एक फ़ाइल है

aaa = bbb

अब मैं उन्हें बदलना चाहूंगा:

aaa = xxx

मैं इस प्रकार कर सकता हूं:

sed "s / aaa = bbb / aaa = xxx / g"

अब मेरे पास कुछ लाइनों के साथ एक फ़ाइल है:

aaa = bbb
aaa = सीसीसी
aaa = ddd
आआआ = [कुछ और]

मैं इन सभी लाइनों aaa=[something]को sedaaa=xxx का उपयोग करके कैसे बदल सकता हूं ?


2
क्या [something else]शाब्दिक पाठ है, या यह केवल एक प्लेसहोल्डर है? बराबरी के संकेत के बाद चीज़ का संभावित प्रारूप क्या है?
०५५३३

यह एक रेगेक्स प्रश्न से अधिक है जो एक सेड प्रश्न नहीं है।
सुरक्षित 12

जवाबों:


217

इसे इस्तेमाल करे:

sed "s/aaa=.*/aaa=xxx/g"

4
आदत के बल, इसे इस मामले में नजरअंदाज किया जा सकता है - यह लाइन के लिए एक वैश्विक प्रतिस्थापन के रूप में उपयोग किया जाता है ताकि प्रत्येक मैच को पहले के बजाय बदला जा सके। इस मामले में हालांकि केवल पहले का मिलान किया जाएगा .*
जॉन डोयल

1
माइकल जे। बार्बर, gरिप्सेप के सभी उदाहरणों को प्रतिस्थापन के साथ प्रतिस्थापित करते हैं
A-IV

116

इसे पूरा करने के लिए आप sed की परिवर्तन रेखा का भी उपयोग कर सकते हैं:

sed -i "/aaa=/c\aaa=xxx" your_file_here

यह aaa=परीक्षण के माध्यम से गुजरने वाली किसी भी रेखा को खोजेगा, जिसका अर्थ है कि उस रेखा में अक्षर हैं aaa=। फिर यह पूरी लाइन को आआआ = xxx से बदल देता है। आप ^परीक्षण की शुरुआत में यह सुनिश्चित करने के लिए जोड़ सकते हैं कि आपको केवल वे पंक्तियाँ मिलें जो आपके साथ शुरू होती हैं aaa=लेकिन आपके ऊपर है।


12
OS X का बैकस्लैश और एक न्यूलाइन द्वारा अनुसरण करने की sedआवश्यकता होती cहै, और यह सम्मिलित पाठ के लिए एक न्यूलाइन को संलग्न नहीं करता है, लेकिन आप उदाहरण के लिए उपयोग कर सकते हैं $'/aaa=/c\\\naaa=xxx\n'
Lri

यहाँ परिवर्तन और बदलें विशेषता के sed प्रलेखन में उदाहरण है कि @Mr। टी की बात हो रही है।
जीन_वुड 3

यह वास्तव में वह करने के लिए निकटतम है जो पूछा गया ... (लेकिन पोर्टिबिलिटी के लिए Lri के संस्करण की आवश्यकता है)
Gert van den Berg

42

ऐशे ही:

sed 's/aaa=.*/aaa=xxx/'

यदि आप यह गारंटी देना चाहते हैं कि aaa=लाइन के प्रारंभ में है, तो इसे बनाएं:

sed 's/^aaa=.*/aaa=xxx/'

1
क्या होगा अगर मैं आना = 'xxxx' से बदलना चाहता हूं। मैंने भागने की कोशिश की, sed 's/aaa=.*/aaa=\'xxx\'/'लेकिन यह >एक नई लाइन में एक शीघ्र खुल जाता है ...
नागदेव



0

यह आपके लिए काम कर सकता है:

cat <<! | sed '/aaa=\(bbb\|ccc\|ddd\)/!s/\(aaa=\).*/\1xxx/'
> aaa=bbb
> aaa=ccc
> aaa=ddd
> aaa=[something else]
!
aaa=bbb
aaa=ccc
aaa=ddd
aaa=xxx

मैं के लिए एक स्पष्ट की जांच नहीं लगता कि bbb, ccc, और dddकाफी क्या ओपी मन में था है।
पालक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.