2011-09-07 18 views
7

grepをstopwords-fileとともに使用して、別のファイルから共通の英語単語を除外したいと考えています。ファイル "somefile"には1行に1語が含まれています。grepを使用してストップワードファイルから単語を除外する

cat somefile | grep -v -f stopwords 

このアプローチの問題点は次のとおりです。それは、ストップワードのワードがsomefileという中で発生するかどうかをチェックしますが、私は反対のことをしたい、somefileというのワードがストップワードで発生した場合、すなわち、確認してください。

これを行う方法?

somefileという内容は次のとおりです。

hello 
o 
orange 

ストップワードには以下が含まれています。

o 

私はsomefileというのだけで単語の "o" をフィルタリングしたい、ではありませんこんにちは、オレンジ。あなたがストップワードファイル/ tmp /言葉を持っていると仮定すると

grep -v -w -f stopwords somefile 

答えて

14

私はいくつかのより多くのそれについて考え、そして解決策を見つけた...

は、単語全体に一致するようにgrep-wスイッチを使用します。

in 
the 

あなたがでそれからSEDプログラムを作成することができます。

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

あなたが/tmp/words.sedれますこのよう:

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

をして、任意のテキストファイル検閲するためにそれを使用する:sedの拡張理解する-eが必要とされている

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

を認識に必要な正規表現。 もちろん、[censored]を他の文字列または空の文字列に変更することもできます。

このソリューションは、1行に1語だけでなく、多くの語を処理します。

+1

'' cat'コマンドを避ける 'grep -v -w -f stopwords somefile' – Matthias

+1

クリーンアップの提案に基づいて答えを変更しました@Matthias –

5