使用grep从停用词文件中过滤出单词

我想使用grep和stopword-file来从另一个文件中过滤出常见的英文单词。 文件“somefile”每行包含一个字。

cat somefile | grep -v -f stopwords 

这种方法的问题是:它检查停用词中的单词是否出现在某个文件中,但我想要相反的,即检查停用词中是否出现某个文件中的单词。

这个怎么做?

somefile包含以下内容:

 hello o orange 

停用词包含以下内容:

 o 

我想只从somefile中过滤掉单词“o”,而不是“hello”和“orange”。

我想了一下,找到了一个解决方案…

使用grep-w开关来匹配整个单词:

 grep -v -w -f stopwords somefile 

假设你有文件/ tmp / words:

 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 -f /tmp/words.sed /input/file/to/filter.txt > /censored/output.txt 

-e需要sed来理解识别所需的扩展正则表达式。 当然,如果你愿意的话,你可以把[censored]改成任何其他的字符串或空字符串。

这个解决方案将处理许多单词以及每行文件一个字。