2012-04-03 12 views
13

के आधार पर लाइनों में शामिल होना मेरे पास एक फ़ाइल है, कभी-कभी, विभाजित लाइनें होती हैं। विभाजन इस तथ्य से संकेत मिलता है कि रेखा '+' (संभवतः रिक्त स्थान से पहले) से शुरू होती है। एसईडी का उपयोग करsed: दूसरे

line 1 
line 2 continue 2 
line 3 
... 

:

line 1 
line 2 
    + continue 2 
line 3 
... 

मैं विभाजन रेखा वापस में शामिल होने के लिए करना चाहते हैं। मैं से पहले एक पंक्ति में शामिल होने के बारे में स्पष्ट नहीं हूं।

कोई सुझाव?

उत्तर

15

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

sed '$!N;s/\n\s*+//;P;D' file 
+1

अच्छा, यह गैर-जीएनयू sed में भी काम करता है यदि आप किसी स्थान के साथ '\ s' को प्रतिस्थापित करते हैं! +1। – ghoti

+0

@ghoti मुझे विश्वास है '[[: खाली:]] * 'बेहतर काम कर सकता है? –

+1

@AquariusPower, हां, यह रिक्त स्थान से मेल खाता है, लेकिन यह टैब से भी मेल खाता है, जो निश्चित रूप से 'एस' मैचों के पॉटोंग का समाधान भी है। ओपी ने कहा कि एक निरंतरता को * * + 'रिक्त स्थान से पहले संभवतः इंगित किया गया था, लेकिन उन्होंने टैब के कुछ भी नहीं कहा। शायद कोई फर्क नहीं पड़ता, लेकिन आप कभी नहीं जानते। – ghoti

2

मैं sed से आंशिक नहीं हूं इसलिए यह मेरे लिए एक बड़ी चुनौती थी।

sed -n '1{h;n};/^ *+ */{s// /;H;n};{x;s/\n//g;p};${x;p}' 

awk में यह लगभग है:

awk ' 
    NR == 1 {hold = $0; next} 
    /^ *\+/ {$1 = ""; hold=hold $0; next} 
    {print hold; hold = $0} 
    END {if (hold) print hold} 
' 

तो अंतिम पंक्ति एक "+" पंक्ति है, SED संस्करण एक अनुगामी रिक्त पंक्ति मुद्रित होगा। इसे दबाने के तरीके को समझ नहीं सका।

+0

ध्यान दें कि यह जीएनयू-केवल sed-है। अजीब संस्करण पाठ्यक्रम का अधिक पठनीय तरीका है, लेकिन यह भी पीड़ित है क्योंकि जब आप '$ 1 =" ";", तो आप अपने डिफ़ॉल्ट ओएफएस के साथ $ 0 को फिर से लिखने के लिए बहुत कुछ बताते हैं। यह महत्वपूर्ण नहीं हो सकता है, लेकिन अगर किसी को इस समाधान का उपयोग करना है तो इसे याद रखना चाहिए। – ghoti

1

sed में ऐसा करने से निश्चित रूप से एक अच्छा व्यायाम है, लेकिन यह पर्ल में बहुत तुच्छ है:

perl -0777 -pe 's/\n\s*\+//g' input 
2

आप पूर्व मोड में विम का उपयोग कर सकते हैं:

ex -sc g/+/-j -cx file 
  1. g वैश्विक खोज

  2. - पिछली लाइन अगली पंक्ति के साथ

  3. j में शामिल होने

  4. x बचाने का चयन करें और पास

 संबंधित मुद्दे