我想使用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]
改成任何其他的字符串或空字符串。
这个解决方案将处理许多单词以及每行文件一个字。