Bash 从另一个文件中删除一个文件中的停止字

Bash 从另一个文件中删除一个文件中的停止字,bash,Bash,我有一个文件File1.txt,里面有一些单词。我有另一个文件(称为blacklistwords.txt),我需要从原始文件1.txt中删除blacklistwords.txt中包含的所有单词 File1.txt ---------- return 25 murder 28 another 54 stackoverflow 12 response 16 violence 32 blacklistwords.txt ------------------ violence murde

我有一个文件File1.txt,里面有一些单词。我有另一个文件(称为blacklistwords.txt),我需要从原始文件1.txt中删除blacklistwords.txt中包含的所有单词

File1.txt
----------
return  25
murder  28
another  54
stackoverflow  12
response  16
violence  32


blacklistwords.txt
------------------
violence
murder
crime
这是输出的外观:

Final output:
-------------
return  25
another  54
stackoverflow  12
response  16

我试过这个,它成功了:

grep -i -F -v -f blacklistwords.txt file1.txt

你的解决方案基本上是正确的


请允许我注意,您没有要求不区分大小写的站点匹配,通过
-i
开关添加它会造成相当大的性能损失,至少对于unicode环境来说是如此,因此如果不是真的需要的话,您可能希望去掉它。

在为我自己的案例分析user965692的解决方案时,我发现需要另一个选项,
-w
,它只搜索整个单词

要完全分解它:

  • -i
    告诉grep忽略大小写
  • -F
    告诉grep需要一个固定字符串列表
  • -w
    搜索整个单词(即,如果“flow”是一个stopword,它将与“overflow”不匹配)
  • -v
    反转匹配项(即,仅打印字符串列表中没有的内容
  • -f blacklistwords.txt
    从给定文件的行中获取模式
因此,要删除所有列入黑名单的单词:


grep-i-F-w-v-F blacklistwords.txt file1.txt

如果您告诉我们您使用的是什么操作系统,那会有所帮助。