सिर; सिर
{ head -n[num] >/dev/null
head -n[num]
} <infile >outfile
उपरोक्त के साथ आप आउटपुट w / पहला headकमांड के सिर को छीनने के लिए लाइनों की पहली संख्या निर्दिष्ट कर सकते हैं , और outfileदूसरी के साथ लिखने के लिए लाइनों की संख्या । यह आम तौर पर इस तेजी से भी करेगा sed- खासकर जब इनपुट बड़ा है - दो चालान की आवश्यकता के बावजूद। कहाँ sedनिश्चित रूप से करना चाहिए , हालांकि पसंद किया जा, ऐसा होता है कि में है <infileहै नहीं एक नियमित रूप से, lseekable क्योंकि यह आम तौर पर होगा - फ़ाइल नहीं है कि मामले में इरादा किया था लेकिन के रूप में काम sedएक एकल, पटकथा प्रक्रिया में सभी उत्पादन संशोधनों संभाल कर सकते हैं।
जीएनयू के साथ head आप दूसरे कमांड के -लिए भी नकारात्मक रूप का उपयोग कर सकते हैं [num]। किस स्थिति में निम्नलिखित कमांड इनपुट से पहली और आखिरी लाइनें छीन लेगी:
{ head -n1 >/dev/null
head -n-1
} <infile >outfile
या एक POSIX के साथ sed:
उदाहरण के लिए, मैं 20 लाइनों का एक इनपुट पढ़ रहा था और मैं पहले 3 और आखिरी को छीनना चाहता था। 7. अगर मैंने ऐसा करने का संकल्प लिया / sed , मैं इसे टेल बफर के साथ करूँगा। मैं पहले तीन और सात को दस की कुल स्ट्रिप गिनती के लिए एक साथ जोड़ूंगा और फिर करूँगा:
seq 20 | sed -ne:n -e '3d;N;1,10bn' -eP\;D
यह एक उदाहरण है जो इनपुट से पहले 3 और अंतिम 7 लाइनों को स्ट्रिप्स करता है। विचार यह है कि आप स्टैक पर पैटर्न स्पेस में इनपुट की पूंछ से पट्टी करने के लिए जितनी चाहें उतनी पंक्तियों को बफर कर सकते हैं, लेकिन Pइनमें से खींची गई प्रत्येक पंक्ति के लिए केवल सबसे पहले रिंट करें।
- तर्ज पर
1,10 sed P कुछ भी नहीं होता है क्योंकि उनमें से प्रत्येक के लिए यह एक रिंच लूप में पैटर्न स्पेस लाइन-बाय-लाइन में इनपुट स्टैकिंग है b।
- 3 वीं पंक्ति के सभी पर
sed स्टैक को dहटा दिया गया है - और इसलिए पहली 3 पंक्तियों को एक झपट्टा में आउटपुट से छीन लिया गया है।
- जब इनपुट
sedकी $अंतिम पंक्ति तक पहुँचता है और एक्सट में खींचने का प्रयास करता है तो Nयह ईओएफ से टकराता है और पूरी तरह से प्रसंस्करण बंद कर देता है। लेकिन उस समय पैटर्न स्पेस में सभी लाइनें होती हैं 14,20- जिनमें से कोई भी अभी तक Printed नहीं हुई है, और कभी नहीं होती है।
- हर दूसरी पंक्ति में
sed Pकेवल \nपैटर्न स्पेस में पहली होने वाली इवलाइन तक संकेत मिलता है, और Dजो कुछ भी रहता है उसके साथ एक नया चक्र शुरू करने से पहले ईलेट्स - या इनपुट की अगली 6 लाइनें। 7 वीं पंक्ति को फिर से Nनए चक्र में अतिरिक्त कमांड के साथ स्टैक में जोड़ा जाता है।
और इसलिए , केवल seqआउटपुट (जो 20 क्रमिक रूप से क्रमांकित रेखाएं हैं) , sedकेवल प्रिंट:
4
5
6
7
8
9
10
11
12
13
यह समस्याग्रस्त हो जाता है जब आप इनपुट की पूंछ से पट्टी करने की इच्छा वाली लाइनों की संख्या बड़ी होती है - क्योंकि sedइसका प्रदर्शन सीधे इसके पैटर्न अंतरिक्ष के आकार के लिए आनुपातिक है। फिर भी, हालांकि, यह कई मामलों में एक व्यवहार्य समाधान है - और POSIX sedबस्ट करने से पहले कम से कम 4kb को संभालने के लिए एक पैटर्न स्पेस को निर्दिष्ट करता है।