मैं इस तरह के कार्यों को पूरा करने के लिए विम ग्लोबल कमांड का उपयोग करना पसंद करता हूं। यह एक पंक्ति की शुरुआत में पुनरावृत्ति को जोड़ने या पाठ में एक प्रतीक को संशोधित करने के लिए लागू होता है। यह अन्य समाधानों की तुलना में अधिक जटिल दिखता है, लेकिन जब आप इसे संभालते हैं तो उपयोग करने के लिए एक बहुत ही लचीला पैटर्न होता है, और बहुत अधिक विचार किए बिना संशोधित करना आसान होता है।
सबसे पहले, अपनी सीमा चुनें (जो लाइनें आप इसे लागू करना चाहते हैं)। मैं आमतौर पर अंक का उपयोग करता हूं (उदाहरण के ma
लिए पहली पंक्ति mb
पर और दूसरे पर, लेकिन आप लाइन नंबर या दृश्य चयन का भी उपयोग कर सकते हैं), फिर निम्न कमांड का एक संशोधन दर्ज करें (वर्तमान में आपके उपयोग के मामले के लिए ट्वीक किया गया)
:let i=1|'a,'bg/^/s/^/\=i.". "/|let i=i+1
डीकंस्ट्रक्शन
:let i=1
यह i
एक स्टार्ट वैल्यू के साथ वेरिएबल सेट करता है । आमतौर पर सूचियाँ 1 से शुरू होती हैं, इसलिए मैं i से 1 स्थापित कर रहा हूँ।
|
बार एक नया कमांड शुरू करता है
'a,'b
यह अगले कमांड की सीमा निर्धारित करता है। मैं मार्क से मार्क a
तक जा रहा हूं b
, जो आपकी सूची की पहली लाइन और आखिरी लाइन पर सेट होगा।
g/^/
यह ग्लोबल कमांड है। यह दी गई नियमित अभिव्यक्ति के लिए फ़ाइल (या रेंज) की खोज करता है, और मिलान की गई प्रत्येक पंक्ति पर शेष कमांड लाइन को निष्पादित करेगा । मैं "लाइन की शुरुआत" की खोज करके हर पंक्ति का मिलान कर रहा हूं। यदि आपके पास पाठ की तरह था
Item some txt
other text
Item second item
whatever
Item third
और केवल इन लेबलों Item
को दूसरी लाइनों के सामने रखना और अनदेखा करना चाहते हैं, ( g/Item/
या g/^Item/
शाब्दिक आइटम पाठ को मानकर)
s/^/\=i.". "/
यह नियमित अभिव्यक्ति को अंजाम के साथ रेखा के आरंभ को बदलने के लिए निष्पादित करता i
है .
। आम तौर पर आप इसे कुछ भी कर सकते हैं ( Item
उदाहरण के लिए, लेबल को नंबर के साथ बदलें )।
|let i=i+1
भले ही बार एक नई कमांड शुरू करता है, लेकिन यह ग्लोबल कमांड पूरा होने के बाद ग्लोबल कमांड के भीतर चलने के लिए दूसरी कमांड सेट करता है। i
अगली पंक्ति को जी द्वारा संसाधित करने से पहले हम परिणाम बढ़ाते हैं । यहाँ लचीलापन का एक और स्थान है। I का संशोधन कुछ भी हो सकता है (2 से वृद्धि, एक फ़ंक्शन को कॉल करें जो फाइबोनैचि अनुक्रम के अगले तत्व को उत्पन्न करता है, जो भी हो)।
awk
शायद इस काम के लिए उपकरण है। लेकिन मैं विंडोज (आह) पर हूं।