Pim*_*kos 7 linux grep stop-words
我想使用grep和一个stopwords文件来过滤掉另一个文件中的常用英语单词.文件"somefile"每行包含一个单词.
cat somefile | grep -v -f stopwords
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是:它检查停用词中的单词是否出现在某个文件中,但我想要相反,即检查某些文件中的单词是否出现在停用词中.
这该怎么做?
例
somefile包含以下内容:
hello
o
orange
Run Code Online (Sandbox Code Playgroud)
停用词包含以下内容:
o
Run Code Online (Sandbox Code Playgroud)
我想从somefile中过滤出单词"o",而不是hello和orange.
Pim*_*kos 14
我想了一下,找到了解决方案......
使用-w开关grep来匹配整个单词:
grep -v -w -f stopwords somefile
Run Code Online (Sandbox Code Playgroud)
假设您有停用词文件/ tmp/words:
in
the
Run Code Online (Sandbox Code Playgroud)
你可以从它创建sed程序:
sed 's|^|s/\\<|; s|$|\\>/[CENSORED]/g;|' /tmp/words > /tmp/words.sed
Run Code Online (Sandbox Code Playgroud)
这样你就得到/tmp/words.sed:
s/\<in\>/[CENSORED]/g;
s/\<the\>/[CENSORED]/g;
Run Code Online (Sandbox Code Playgroud)
然后用它来审查任何文本文件:
sed -e -f /tmp/words.sed /input/file/to/filter.txt > /censored/output.txt
Run Code Online (Sandbox Code Playgroud)
在-e需要对sed的了解需要识别扩展的正则表达式.当然,[censored]如果您愿意,您可以更改为任何其他字符串或空字符串.
该解决方案将处理许多单词并且每行文件一个单词.