2012-04-17 19 views
21

को छोड़कर सभी लाइनों को सूचीबद्ध करें मैं एक टेक्स्ट फ़ाइल से सभी लाइनों को स्वचालित रूप से हटाने की कोशिश कर रहा हूं जिसमें एक अक्षर "टी" होता है जिसे तुरंत "एच" के बाद नहीं किया जाता है। मैं grep का उपयोग कर रहा हूं और आउटपुट को दूसरी फाइल में भेज रहा हूं, लेकिन मैं जादू regex के साथ नहीं आ सकता है जो मुझे ऐसा करने में मदद करेगा।Grep Regex:

यदि grep का उपयोग करने का सही उपकरण नहीं है तो मुझे अजीब, sed, या कुछ अन्य लिनक्स टूल का उपयोग करने में कोई फर्क नहीं पड़ता।

उत्तर

51

कि यह करना चाहिए:

grep -v 'T[^H]' 

-v:

मिलान प्रिंट लाइनें नहीं [^ एच]:। किसी भी चरित्र लेकिन एच

+2

'के दोनों उदाहरणों से मेल खाता है *' आवश्यक नहीं हैं , क्योंकि grep एक पंक्ति की तलाश में पूरी लाइन स्कैन करता है –

+0

टिप्पणी के लिए धन्यवाद। इसे प्रतिबिंबित करने के लिए संपादित। – byrondrossos

9

आप कर सकते हैं:

grep -v 'T[^H]' input 

-v ग्रेप का प्रतिलोम मिलान विकल्प यह लाइनों है कि आकार से मिलान की सूची नहीं है है।

उपयोग किया गया रेगेक्स T[^H] है जो T के रूप में किसी भी पंक्ति से मेल खाता है जिसके बाद H के अलावा कोई भी चरित्र होता है।