使用grep过滤掉一个停用词文件中的单词

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)


Mic*_*jer 5

假设您有停用词文件/ 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]如果您愿意,您可以更改为任何其他字符串或空字符串.

该解决方案将处理许多单词并且每行文件一个单词.