माना जाता है कि सभी चीजें, संपूर्ण फ़ाइल को प्राप्त करने का सबसे तेज़ तरीका हो सकता है।
मूल सिंटैक्स निम्नानुसार है:
sed -e '1h;2,$H;$!d;g' -e 's/__YOUR_REGEX_GOES_HERE__...'
ध्यान रहे, यदि फ़ाइल जबरदस्त रूप से बड़ी हो, तो पूरी फ़ाइल को टटोलना एक विकल्प नहीं हो सकता है। ऐसे मामलों के लिए, यहां दिए गए अन्य उत्तर अनुकूलित समाधान प्रदान करते हैं जो एक छोटे मेमोरी फ़ुटप्रिंट पर काम करने की गारंटी है।
अन्य सभी हैक और स्लेश स्थितियों के लिए, केवल -e '1h;2,$H;$!d;g'
आपके मूल sed
regex तर्क के बाद प्रीपेडिंग का काम पूरा हो जाता है।
जैसे
$ echo -e "Dog\nFox\nCat\nSnake\n" | sed -e '1h;2,$H;$!d;g' -re 's/([^\n]*)\n([^\n]*)\n/Quick \2\nLazy \1\n/g'
Quick Fox
Lazy Dog
Quick Snake
Lazy Cat
क्या करता -e '1h;2,$H;$!d;g'
है?
1
, 2,$
, $!
भागों लाइन है कि सीमा जो लाइनों सीधे निम्न आदेश पर चलता है विनिर्देशक हैं।
1
: पहली पंक्ति केवल
2,$
: दूसरी से शुरू होने वाली सभी लाइनें
$!
: अंतिम के अलावा हर पंक्ति
इतना विस्तारित, यह वही है जो एन लाइन इनपुट की प्रत्येक पंक्ति पर होता है।
1: h, d
2: H, d
3: H, d
.
.
N-2: H, d
N-1: H, d
N: H, g
g
आदेश एक लाइन विनिर्देशक नहीं दिया जाता है, लेकिन पूर्ववर्ती d
आदेश एक विशेष खंड है " प्रारंभ अगले चक्र। ", और इस से बचाता है g
पिछले छोड़कर सभी लाइनों पर चलने से।
प्रत्येक आदेश के अर्थ के लिए:
- पहले
h
के बाद H
प्रत्येक पंक्ति प्रतियों पर रों में इनपुट की तर्ज कहा sed
की पकड़ अंतरिक्ष । (मनमाना टेक्स्ट बफर सोचें।)
- बाद में,
d
इन पंक्तियों को आउटपुट पर लिखे जाने से रोकने के लिए प्रत्येक पंक्ति को डिस्कस करता है। पकड़ अंतरिक्ष तथापि संरक्षित है।
- अंत में, बहुत अंतिम पंक्ति पर, होल्ड स्पेस
g
से प्रत्येक लाइन के संचय को पुनर्स्थापित करता है , ताकि पूरे इनपुट पर इसकी रेगेक्स चलाने में सक्षम हो (बजाय एक लाइन-ए-टाइम के फैशन में), और इसलिए सक्षम है s पर मैच ।sed
\n