2008-10-13 16 views
9

आउटपुट करें, मैं ऐसा करने के लिए एक छोटी सी लिपि लिख सकता हूं लेकिन यूनिक्स के साथ अधिक familliar पाने के लिए मेरी चल रही खोज में मैं इसके बजाय कमांड में निर्मित विधियों का उपयोग करना कुशल तरीकों को सीखना चाहता हूं।एक मैच मिलने तक फ़ाइल लाइनों को छोड़ें, फिर बाकी

मुझे बहुत बड़ी फ़ाइलों से निपटने की ज़रूरत है जिनमें हेडर लाइनों की एक चर संख्या है। अंतिम शीर्षलेख पंक्ति में 'LastHeaderLine' टेक्स्ट होता है। मैं इस लाइन के बाद सब कुछ आउटपुट करना चाहता हूं। (मैं गलत सकारात्मक मिलानों के बारे में चिंतित नहीं हूँ।)

उत्तर

6

एसईडी का उपयोग करना:

sed -ne '/LastHeaderLine/,$p' <inputfile 

फ़ाइल के अंत करने के लिए regex मैच से सब कुछ भरपाई कर देंगे। 'पी' मेल खाने वाली रेखाओं को प्रिंट करता है।

संपादित करें:

दूसरी सोचा पर, आप नहीं LastHeaderLine मिलान लाइन प्रिंट करना चाहते हैं। Sed के साथ करना मुश्किल है। पर्ल में, आपको निम्न कर सकता है:

perl -ne 'if ($flag) {print;} if (/LastHeaderFile/) {$flag=1;}' <inputfile 

यह केवल लाइनों मुद्रित होगा सख्ती से regex मैच के बाद।

9

इस के लिए अजीब कोशिश क्यों नहीं करें? यह इस तरह दिखेगा:

awk 'NR == 1, /LastHeaderLine/ { next } { print }' myinputfile > myoutputfile 

जहां एनआर == 1 पहली पंक्ति के लिए सच है, /LastHeaderLine/ अपने पिछले हैडर पंक्ति से मेल खाती। अल्पविराम ऑपरेटर निम्नलिखित कार्य {अगली} दो नियमित अभिव्यक्तियों की सीमा में सभी वाक्यों के लिए आग देता है। इस मामले में यह बिना किसी ऑपरेशन के इनपुट की अगली पंक्ति पर जायेगा। अन्य सभी इनपुट लाइनों के लिए यह लाइनों को मानक आउटपुट पर प्रिंट करेगा, जिसे आप रीडायरेक्ट कर सकते हैं>।

20

Avi के उत्तर के समान, लेकिन "LastHeaderLine" के साथ लाइन को शामिल किए बिना।

sed -e '1,/LastHeaderLine/d' 
+0

यह मेरे से बहुत साफ है :-) – Avi

संबंधित मुद्दे