मैं sed का उपयोग करके किसी विशिष्ट शब्द के बाद पाठ को कैसे बदल सकता हूं?


12

मैंने नामक एक फ़ाइल है .ignore। को बदलने की जरूरत है projdir। उदाहरण के लिए:

ignore \..*
ignore README
projdir Snake

मुझे साँप को बदलने की ज़रूरत है, उदाहरण के लिए, "पचमन"। मैंने मैन पेज पढ़ा, लेकिन मुझे नहीं पता कि क्या करना है।

जवाबों:


18

एक पंक्ति के साथ खोजें जो शुरू होती है projdir, और पूरी पंक्ति को एक नए के साथ बदलें:

sed -i 's/^projdir .*$/projdir PacMan/' .ignore

^और $लाइन मार्करों की शुरुआत / अंत कर रहे हैं, इसलिए पैटर्न पूरी लाइन से मेल खाएगा; .*कुछ भी मेल खाता है। -iबताता sedपरिवर्तन सीधे करने के लिए लिखने के लिए .ignoreसिर्फ उन्हें outputting में, बजाय


यदि आप इसके लिए लंबे विकल्प का उपयोग करते हैं -i, --in-placeतो इसका उदाहरण अधिक स्व-दस्तावेजीकरण होगा।
एलिजा लिन

5

एक दृष्टिकोण पूरी लाइन को फिर से लिखना है, उन हिस्सों के लिए बैकरेफरेंस का उपयोग करना जिन्हें आप रखना चाहते हैं:

sed -e 's/^\( *projdir  *\)[^ ]*\(.*\)*$/\1PacMan\2/'

एक अन्य तरीका यह है कि लाइन के उस हिस्से को फिर से लिखना है, लेकिन केवल अगर कुछ अन्य भाग मेल खाते हैं:

sed -e '/^ *projdir / s/ [^# ]/ PacMan/'

दोनों उदाहरण लाइनों पर दूसरे व्हाट्सएप-सीमांकित शब्द को फिर से लिखते हैं जहां पहला शब्द है projdir


3

हालाँकि यह एक पुराना पोस्ट है और यह आपके लिए स्वीकृत उत्तर से हल किया हुआ लगता है, वास्तविक प्रश्न का उत्तर नहीं दिया गया है। तो पूर्णता के लिए और दूसरों की मदद करने के लिए:

यहाँ जवाब है कि वास्तव में "साँप" के लिए मेल खाता है और "प्रोजिर" के साथ शुरू होने वाली लाइनों के लिए नहीं ...

sed -r 's/(^.*)Snake/\1PacMan' .ignore

यह "स्नेक" + "पीएसीएमएन" से पहले सब कुछ के साथ "स्नेक" सहित लाइन की शुरुआत से सब कुछ बदल देता है। \ 1 का अर्थ है कि जो अंदर से मेल खाता है ()। "साँप" के बाद सब कुछ अछूता नहीं रहता है।


1
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore

^ प्रोजिडिर वह रेखा ढूंढना है जो स्ट्रिंग प्रोज्डर से शुरू होती है। *। $ वहीं लाइन में प्रोज्डिर के बाद स्ट्रिंग के लिए खड़ा है। स्ट्रिंग projdir PacMan वह स्ट्रिंग है जिसके साथ हम प्रतिस्थापित कर रहे हैं। जी वैश्विक के लिए है - ऐसे सभी लाइनों को बदलने के लिए जो प्रोज्डिर से शुरू होती है। .ignore फ़ाइल का नाम है


1
क्या आप अपना जवाब बढ़ा सकते हैं और स्पष्ट कर सकते हैं कि क्या है?
रोमियो निनोव

उत्तर बहुत उपयोगी होते हैं यदि वे शामिल हैं कि कैसे और क्यों एक कमांड या कोड का टुकड़ा काम करता है।
एंथोनी जोगेगन

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