sed - Simplify text processing pipeline with awk -


मेरे पास निम्न पाठ डेटा है (अत्यधिक सरलीकृत):

  dn: cn = config ObjectClass: olcGlobal cn: config कुछ: गुणों dn: cn = {0} kerberos, cn = स्कीमा, cn = config ऑब्जेक्ट क्लास: olcSchemaConfig cn: {0} केरबोर्स कुछ: गुण कुछ: जंक कुछ: अधिक जंक dn: olcDatabase = {- 1} फ़्रंटएन्ड, सीएन = कॉन्फ़िग ऑब्जेक्ट क्लास: ओएलसीडीबेसकुंजः कुछ: गुण  

वांछित आउटपुट है:

  डीएन: सीएन = केरबोर्स, सीएन = स्कीमा, सीएन = Config ऑब्जेक्ट क्लास: olcSchemaConfig cn: kerberos some: properties  

मैंने इसे प्राप्त करने के लिए निम्न शेल पाइपलाइन लिखा है:

  awk -vRS = -vFS = "\ N" '/ kerberos / {प्रिंट $ 0}' /tmp/input.txt | \ Sed 's / {0} केर्बोरोस / केर्बोर्स /' | \ Sed '/ some: जंक /, $ d'  

यह सिर्फ ठीक काम करता है, लेकिन मुझे लगता है कि यह 'धोखा दे रहा है' मैं एक एकल ए्वकी स्क्रिप्ट का प्रयोग करके इसे कैसे लागू कर सकता हूं?

स्पष्ट रूप से, आपको केवल एक sed कमांड, दो नहीं:

  sed -e's / {0} केरबोर्स / केर्बोरो / '-e' / कुछ: जंक /, $ d ' < / Pre> 

जब तक आप सी शेल का उपयोग करने पर जोर न दें, लाइनों के छोर पर बैकस्लैश अनावश्यक हैं।

आप इसे एक एकल sed कमांड में कर सकते हैं :

<पूर्व> sed -n -e / kerberos /, / ^ $ / {s / {0} केर्बोर्स / केर्बोरो / / कुछ: जंक /, $ d; P;} '

जो एक कोड पर s /// प्रतिस्थापन के बाद एक पंक्ति पर चपटा हो सकता है।

  Sed -n -e '/ kerberos /, / ^ $ / {s / {0} केर्बोर्स / केर्बोरोस /; / कुछ: जंक /, $ d; पी; } ' 

मैक ओएस एक्स (बीएसडी) पर एस के साथ } सेमिकलन की आवश्यकता है; इसके बिना GNU sed खुश है।

आप इसे awk में भी कर सकते हैं:

  awk '/ केर्बोर्स /, / ^ $ / {उप (/ \ {0 \} केर्बोर्स /, "केर्बोर्स"); अगर ($ 0 ~ / ^ कुछ: / और & amp; कुछ ++ & gt; 0) अगला; इनपुट डेटा के लिए, उत्पादन करता है:  
  dn: cn = kerberos, यदि ($ 0! = "") प्रिंट} 'input.txt  

Cn = स्कीमा, सीएन = कॉन्फ़िग ऑब्जेक्ट क्लास: ओल्स्क स्कीमा कॉन्फ़िफ़ सीएन: केरबोर्स कुछ: गुण


Comments

Popular posts from this blog

c# - Highlight all words containing a letter in a richtextbox -

Editing Python Class in Shell and SQLAlchemy -

java - JavaFX WebEngine Video Playback in Linux -