सिर; सिर
{ 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
- जिनमें से कोई भी अभी तक P
rinted नहीं हुई है, और कभी नहीं होती है।
- हर दूसरी पंक्ति में
sed
P
केवल \n
पैटर्न स्पेस में पहली होने वाली इवलाइन तक संकेत मिलता है, और D
जो कुछ भी रहता है उसके साथ एक नया चक्र शुरू करने से पहले ईलेट्स - या इनपुट की अगली 6 लाइनें। 7 वीं पंक्ति को फिर से N
नए चक्र में अतिरिक्त कमांड के साथ स्टैक में जोड़ा जाता है।
और इसलिए , केवल seq
आउटपुट (जो 20 क्रमिक रूप से क्रमांकित रेखाएं हैं) , sed
केवल प्रिंट:
4
5
6
7
8
9
10
11
12
13
यह समस्याग्रस्त हो जाता है जब आप इनपुट की पूंछ से पट्टी करने की इच्छा वाली लाइनों की संख्या बड़ी होती है - क्योंकि sed
इसका प्रदर्शन सीधे इसके पैटर्न अंतरिक्ष के आकार के लिए आनुपातिक है। फिर भी, हालांकि, यह कई मामलों में एक व्यवहार्य समाधान है - और POSIX sed
बस्ट करने से पहले कम से कम 4kb को संभालने के लिए एक पैटर्न स्पेस को निर्दिष्ट करता है।