आप बाहरी फ़िल्टर के रूप में Ex
कमांड के साथ भी ऐसा कर सकते हैं sed
:
:%!sed -n 'h;n;G;h;n;G;h;n;G;p'
यह संस्करण 4 के कई से परे किसी भी अतिरिक्त लाइनों को अनदेखा (हटाएगा) 4 लाइनों से कम के अंतिम सेट (उलट) का उपयोग करने के लिए:
:%!sed -n '$p;h;n;G;$p;h;n;G;$p;h;n;G;p'
%
यहाँ 'बफर में हर लाइन मतलब है। "
!
आदेश का अर्थ है "इनपुट के रूप में निर्दिष्ट लाइनों के साथ निम्न आदेश चलाएँ, और की जगह आदेश के उत्पादन के साथ निर्दिष्ट लाइनों।" (इसे एक फ़िल्टर कहा जाता है, जैसे छँटाई के लिए बहुत आसान है, जैसे, :%!sort
आपकी फ़ाइल में सभी पंक्तियों :2,8!sort
को सॉर्ट करेगा ; लाइनों को 2-8, आदि सॉर्ट करेगा)
sed
है धारा संपादक उपकरण और सभी यूनिक्स सिस्टम पर पाया जाता है। sed
यहां उपयोग की जाने वाली प्रमुख अवधारणाएं "पैटर्न स्पेस" हैं (जो डिफ़ॉल्ट रूप से बदले में इनपुट की प्रत्येक पंक्ति में शामिल हैं), और "होल्ड स्पेस" (जो कि जहां आप अतिरिक्त टेक्स्ट को छड़ी कर सकते हैं, जबकि sed
इसे दूसरे को संसाधित करते समय सहेज सकते हैं इनपुट की लाइनें)।
-n
sed
पैटर्न स्पेस को प्रिंट करने की अपनी डिफ़ॉल्ट क्रियाओं को दबाने के लिए कमांड का एक विकल्प है (क्योंकि इस मामले में हम केवल तब प्रिंट करना चाहते हैं जब हम स्पष्ट रूप से ऐसा कहते हैं।)
$p
में sed
आदेश का अर्थ है "आप की अंतिम पंक्ति पर कर रहे हैं sed
के इनपुट, प्रिंट (पैटर्न अंतरिक्ष)।"
h
का अर्थ है "जो कुछ भी वहाँ है, उसे अधिलेखित कर 'होल्ड स्पेस' में 'पैटर्न स्पेस' की वर्तमान सामग्री को चिपकाएँ।"
n
का अर्थ है "इनपुट से अगली पंक्ति के साथ 'पैटर्न स्पेस' की सामग्री को बदलें।"
G
का अर्थ है "पैटर्न स्पेस के लिए अपील": 'होल्ड स्पेस' की सामग्री के बाद एक नई रूपरेखा। "
सभी को एक साथ लिया गया, sed
कमांड आउटपुट की चार पंक्तियों को स्टोर करता है, उन्हें उलट देता है क्योंकि यह उन्हें स्टोर करता है, और फिर उन्हें प्रिंट करता है। $p
आदेशों दूसरे संस्करण में जोड़ा सुनिश्चित करना है कि अगर फ़ाइल की अंतिम पंक्ति 4 लाइनों की एक बहु पर के अलावा अन्य पहुँच जाता है, लाइनों अभी भी मुद्रित कर रहे हैं।
किसी वैकल्पिक-विशिष्ट सुविधाओं का उपयोग किए बिना और बाहरी फ़िल्टर का उपयोग किए बिना एक वैकल्पिक, इंटरैक्टिव दृष्टिकोण के लिए अभी भी:
:4
चौथी पंक्ति में जाने के लिए।
:.m -4 | +3m . | +2m . | +5
पिछली चार लाइनों (1-4) को उलटने के लिए और लाइन 8 पर अपने कर्सर को छोड़ दें।
.m -4
लाइन चार लाइनों के पीछे (स्थानांतरित रेखा पर कर्सर को छोड़कर) के बाद बस वर्तमान लाइन को स्थानांतरित करता है।
+3m .
वर्तमान रेखा के बाद 3 रेखाएँ हैं , जो वर्तमान रेखा के ठीक बाद, स्थानांतरित रेखा पर कर्सर छोड़ती है। +2m .
बेशक एक ही काम करता है।
+5
कर्सर को पांच पंक्तियों के नीचे रखता है जहाँ से यह है।
इच्छानुसार दोहराएं।
विम में आप इस पूरे कमांड को दोहरा सकते हैं @:
, फिर साथ दोहरा सकते हैं @@
। POSIX में vi
या ex
आपको पाठ की एक पंक्ति के रूप में सम्मिलित करने की आवश्यकता होगी :.m -4 | +3m . | +2m . | +5
, इसे एक नामित बफर (रजिस्टर) को हटा दें, और फिर उस नामित बफर (रजिस्टर) को निष्पादित करें।
इसलिए ex
मोड में, POSIX- निर्दिष्ट सुविधाओं का उपयोग करके अंतःक्रियात्मक रूप से लाइनों को उल्टा करना, और पाठ की 17 पंक्तियों के साथ शुरू करना:
Entering Ex mode. Type "visual" to go to Normal mode.
:0a # Append following text after "line 0" (i.e. insert at start of file).
.m -4 | +3m . | +2m . | +5
. # End text insertion
:d k # Delete that line to register k
line1 # This is a printout of the current line
:4 # Move to line 4
line4
:@k # Execute register k to reverse lines 1-4
line8
:@@ # Execute register k again
line12
:@@ # Execute register k again
line16
:@@ # Execute register k again
line17
:%p # Print the whole buffer (just to see what was done)
line4
line3
line2
line1
line8
line7
line6
line5
line12
line11
line10
line9
line16
line15
line14
line13
line17
:wq # Save and quit
आगे की पढाई: