我想使用grep和一个stopwords文件来过滤掉另一个文件中常见的英文单词。文件“somefile”每行包含一个单词。
cat somefile | grep -v -f stopwords
这种方法的问题是:它检查某些文件中是否出现了停用词中的单词,但我想要相反,即检查某些文件中的单词是否出现在停用词中。
怎么做?
示例
somefile包含以下内容:
hello
o
orange
停用词包含以下内容:
o
我想从somefile中过滤掉单词“o”,而不是hello和orange。
答案 0 :(得分:14)
我想了一些,找到了解决方案......
使用-w
的{{1}}开关来匹配整个单词:
grep
答案 1 :(得分:5)
假设您有停用词文件/ 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
sed需要-e
来理解识别所需的扩展正则表达式。
当然,如果愿意,您可以将[censored]
更改为任何其他字符串或空字符串。
此解决方案将处理许多单词和每行文件一个单词。