2011-12-24 7 views

उत्तर

4

sed लाइन पर आधारित उपकरण है। मुझे नहीं लगता कि ये एक विकल्प है।
आप h/H (होल्ड), g/G (प्राप्त) का उपयोग कर सकते हैं।

$ echo -e 'one\ntwo\nthree' | sed -n '1h;1!H;${g;s/one.*two/one/p}' 
one 
three 

शायद तुम कोशिश करनी चाहिए vim

:%s/one\_.*two/one/g 
+1

से टिप के लिए केएस, लेकिन मुझे 'विम' में आराम महसूस नहीं होता है (मैं नया लिनक्स उपयोगकर्ता हूं) AFAIK ऑपरेटर एम/एम का इस्तेमाल मल्टीलाइन मोड – theta

+0

पर स्विच करने के लिए 'sed' को बताने के लिए किया जाता है, मैंने अभी आपके संपादित समाधान को देखा है। क्रिप्टिक लगता है लेकिन मुझे लगता है कि यह सही जवाब है। धन्यवाद – theta

+0

@zetah 'सब कुछ 'होल्ड-स्पेस' पर रखें, फिर इसे प्राप्त करें, और प्रतिस्थापन करें। – kev

3

आप अजगर इस तरह से उपयोग कर सकते हैं:

$ echo -e "one\ntwo\nthree" | python -c 'import re, sys; s=sys.stdin.read(); s=re.sub("(?s)one.*two", "one", s); print s,' 
one 
three 
$ 

इस पूरी अजगर के मानक इनपुट (sys.stdin.read()) पढ़ता है, तो "एक" के लिए विकल्प "एक। * दो" dot matches all setting enabled (नियमित अभिव्यक्ति की शुरुआत में (?s) का उपयोग करके) और फिर संशोधित स्ट्रिंग को प्रिंट करता है (ट्राई मुद्रण में लिंग कॉमा का उपयोग अतिरिक्त अतिरिक्त लाइन जोड़ने से प्रिंट को रोकने के लिए किया जाता है)।

+0

उत्कृष्ट, महान सलाह, मुझे भविष्य की परेशानियों से बचाएगी। मुझे आसान मल्टीलाइन पैटर्न याद आते हैं, जिनका उपयोग विंडोज पर रेगेक्सबड्डी में किया गया था, और फिर पाइथन में इसी तरह के आसान पुनः मॉड्यूल का उपयोग किया गया है कि मैं एक्टिवस्टेट पर कुछ और सामान्य कोड खोजूंगा और इसे सिस्टम कमांड के रूप में उपलब्ध कराऊंगा। चियर्स – theta

1

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

<<<$'one\ntwo\nthree' sed '/two/d' 

या

<<<$'one\ntwo\nthree' sed '2d' 

या

<<<$'one\ntwo\nthree' sed 'n;d' 

या

<<<$'one\ntwo\nthree' sed 'N;N;s/two.//' 

Sed(\n सहित) मैच सभी पात्रों एक डॉट . का उपयोग कर करता है लेकिन आम तौर पर यह पहले से ही, छीन लिया गया है \n बंद, चक्र के हिस्से के रूप तो यह पैटर्न अंतरिक्ष में नहीं रह गया है वर्तमान मिलान किया जा करने के लिए।

केवल कुछ आदेश (N, H और G) पैटर्न/होल्ड स्पेस में नई पंक्तियों को संरक्षित करते हैं।

  1. N पैटर्न अंतरिक्ष के लिए एक नई पंक्ति संलग्न कर देता है और फिर अगले रेखा भी संलग्न।
  2. H बिल्कुल वही करता है सिवाय इसके कि यह होल्ड स्पेस पर कार्य करता है।
  3. G पैटर्न स्थान पर एक नई लाइन जोड़ता है और फिर होल्ड स्पेस में जो कुछ भी जोड़ता है उसे जोड़ता है।

    sed G file 
    

    प्रत्येक पंक्ति के बाद एक खाली पंक्ति सम्मिलित होगा:

पकड़ अंतरिक्ष खाली जब तक आप इसे में कुछ जगह तो है।

sed 'G;G' file 

डाल देगा 2 खाली लाइनों आदि आदि

1

कैसे दो एसईडी कॉल के बारे में:

$ echo -e 'one\ntwo\nthree' | sed 's/two//' | sed '/^$/d' 
one 
three 
('दो' पहले तो रिक्त पंक्ति से छुटकारा पाने से छुटकारा पाने के)

वास्तव में, मैं पर्ल एक-लाइनर्स के लिए अजगर से अधिक पसंद करते हैं:

$ echo -e 'one\ntwo\nthree' | perl -pe 's/two\n//' 
one 
three 
संबंधित मुद्दे