regex - पाठ का एक ब्लॉक, रेगेक्स को प्रस्तुत करना




sed awk (2)

एक बड़ी लॉग फ़ाइल को देखते हुए, टेक्स्ट के ब्लॉक को ठीक करने का सबसे अच्छा तरीका क्या है?

text to be ignored
more text to be ignored
---                                 <---- start capture here
lots of 
text with separators like "---"
---
spanning 
multiple lines
---                                 <---- end capture here
text to be ignored
more text to be ignored

क्या जाना जाता है?

  • पंक्ति में वर्णों की अधिकतम संख्या (55 लेकिन कम हो सकती है)
  • एक ब्लॉक में पंक्तियों की संख्या
  • सेपरेटर (जो खुद को दोहरा सकते हैं)

क्या नियमित अभिव्यक्ति इस ब्लॉक मैच होगा? इच्छित उत्पादन: पाठ के ब्लॉक की सूची

कृपया Linux कमांड लाइन पर्यावरण ग्रहण करें


इसे सरल रखें:

$ awk 'NR==FNR {if (/^---/) { if (!start) start=NR; end=NR } next} FNR>=start && FNR<=end' file file
---                                 <---- start capture here
lots of
text with separators like "---"
---
spanning
multiple lines
---                                 <---- end capture here

$ awk 'NR==FNR {if (/^---/) { if (!start) start=NR; end=NR } next} FNR>start && FNR<end' file file
lots of
text with separators like "---"
---
spanning
multiple lines

कई साल पहले मैंने पैन को कुत्ते में विभाजित करने के लिए इसका इस्तेमाल किया था:

sed -e '$ {x;q}' -e '/@@/ !{H;d}' -e '/@@/ x' # note - i know sed better now

बदलें /@@/ साथ /---/

पहले '---' और आखिरी '---' ऐड -e '1,/---/d' बाद सब कुछ निकालने के लिए और पूरे -e '$ {x;q}' हटा दें।

परिणाम इस तरह होगा:

sed -e '1,/---/d' -e '/---/ !{H;d}' -e x

बस इसे परीक्षण किया और यह दिया उदाहरण के साथ काम करता है।





grep