Sunday, 15 April 2012

sed - Increment all defines/enums in a source file -


मेरे पास बहुत से (100+) परिभाषित करता है / एन्यूमरेशन / वेरिएबल्स जैसे:

  FOO: 1 बार: 2 QUX: 3 // ... ZYX: 99 XYZ: 100  

मैं एक नई पंक्ति जोड़ना चाहता हूं: BAZ: 3 बार के बाद, और QUX के मान को '4' के साथ-साथ बाकी के मूल्यों को अपडेट करने के साथ-साथ अपडेट करें। BAZ के बाद के सभी मूल्यों को बढ़ाने के लिए सबसे आसान और आसान समाधान क्या है, अंतर्निहित / मूल यूनिक्स टेक्स्ट संपादन उपकरण (पाठ संपादक, सेड, आदि) का उपयोग करते हुए?

  $ cat file FOO: 1 बार: 2 QUX: 3 / / ... ZYX: 99 एक्सवाईजेड: 100  

यह बार्स के बाद बीएजी डालता है और उसके बाद हर नंबर को बढ़ाता है:

  $ awk 'NR == 1 , / ^ बार: / {प्रिंट; अगला}! एफ {प्रिंट "BAZ: 3"; f = 1} / ^ [[alnum:]] +: / {प्रिंट $ 1, ++ $ 2; अगला} 1 'फ़ाइल FOO: 1 बार: 2 BAZ: 3 QUX: 4 // ... ZYX: 100 एक्सवाईजेड: 101  

यह कैसे काम करता है

  • एनआर == 1, / ^ बार: / {प्रिंट; अगला}

    बार: से शुरू होने वाली पहली पंक्ति सहित सभी रेखाएं प्रिंट करें

  • ! F {प्रिंट "BAZ: 3"; f = 1}

    हम केवल इस कोड के बाद बार का सामना किया गया है। यहां, BAZ लाइन को जोड़ें और झंडा f को एक में सेट करें ताकि हम इसे फिर से जोड़ना न भूलें।

  • / ^ [[alnum:]] +: / {प्रिंट $ 1, ++ $ 2; अगला}

    बृहदान्त्र के बाद एक पहचानकर्ता के साथ शुरू होने वाली किसी लाइन लाइन के लिए, वृद्धि बृहदान्त्र के बाद की संख्या और अगली पंक्ति तक जायें।

  • 1

    अन्य सभी पंक्तियों के लिए, जैसे // ... , उन्हें प्रिंट करें जैसा है

( 1 के रूप में लाइन मुद्रित करने के लिए awk का गुप्त लबादा है)।

No comments:

Post a Comment