2011-09-07 6 views
7

से शब्दों को फ़िल्टर करने के लिए grep का उपयोग करना मैं एक अन्य फाइल से सामान्य अंग्रेजी शब्दों को फ़िल्टर करने के लिए एक stwordswords-file के साथ grep का उपयोग करना चाहता हूं। फ़ाइल "somefile" में प्रति पंक्ति एक शब्द होता है।एक स्टॉपवर्ड फ़ाइल

cat somefile | grep -v -f stopwords 

इस दृष्टिकोण के साथ समस्या यह है: यह जांच करता है कि stopwords में एक शब्द somefile में होता है, लेकिन मैं चाहता हूँ विपरीत है, यानी की जाँच करता है, तो somefile में एक शब्द stopwords में होता है।

यह कैसे करें?

hello 
o 
orange 

stopwords निम्नलिखित शामिल हैं:

o 

मैं somefile से केवल शब्द 'ओ' के बाहर फ़िल्टर करना चाहते हैं, नहीं

उदाहरण

somefile निम्नलिखित शामिल हैलो और नारंगी।

grep -v -w -f stopwords somefile 

उत्तर

14

मैं इसके बारे में कुछ और सोचा, और एक समाधान मिला ...

पूर्ण शब्दों से मेल करने के लिए grep की -w स्विच का उपयोग करें:

in 
the 

आप इससे द्वारा एसईडी कार्यक्रम बना सकते हैं:

sed 's|^|s/\\<|; s|$|\\>/[CENSORED]/g;|' /tmp/words > /tmp/words.sed 

इस तरह से आप /tmp/words.sed हो जाएगी:

s/\<in\>/[CENSORED]/g; 
s/\<the\>/[CENSORED]/g; 

और फिर इसका इस्तेमाल किसी भी पाठ फ़ाइल को सेंसर करने:

sed -e -f /tmp/words.sed /input/file/to/filter.txt > /censored/output.txt 

-e के लिए बढ़ा दिया समझने के लिए एसईडी की जरूरत है regexp पहचान के लिए आवश्यक है। बेशक आप चाहें तो [censored] किसी अन्य स्ट्रिंग या खाली स्ट्रिंग में बदल सकते हैं।

यह समाधान लाइन में कई शब्द और एक पंक्ति प्रति पंक्ति फ़ाइलों को संभालेगा।

+1

या 'grep -v -w -f stopwords somefile '' cat' कमांड – Matthias

+1

से परहेज करते हुए मैंने आपके क्लीनअप सुझाव @ माथियास के आधार पर उत्तर बदल दिया –

5

मान लिया जाये कि आप stopwords फ़ाइल/tmp/शब्द है:

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