使用 grep 从文件中删除包含另一个文件中的字符串的行

使用 grep 从文件中删除包含另一个文件中的字符串的行

我有一个包含单词(每行一个)的文件,例如





我有一个 CSV 格式的辅助文件,例如

1、鞋子、红色
2、苹果、黑色
3、雾、蓝色

我想使用 grep 以第一个文件作为搜索模式,如果辅助文件中的某一行包含第一个文件中的单词,我想完全删除辅助文件中的该行。

我不确定 grep 是否是解决这个问题的方法。

编辑:bash 脚本

答案1

您可以使用grep-f选项(小写的-f,而不是-F)来执行此操作:

% echo -e 'Dog\nFish\nCat\nShoes' > ./file1.txt 
% echo -e '1,shoes,red\n2,apple,black\n3,fog,blue' > ./file2.csv 

# Grab all lines from the CSV that match a pattern from file1:
% grep -if ./file1.txt ./file2.csv
1,shoes,red

# Grab all lines from the CSV that DON'T match a pattern from file1:
% grep -vif ./file1.txt ./file2.csv
2,apple,black
3,fog,blue

详细解释:

  • grep— 不言自明
  • -v— 表示“返回与输入模式不匹配的行”
  • -i— 表示“使用不区分大小写的匹配”(因为您的第一个文件有大写字母,而 CSV 没有)
  • -f— 表示“将指定文件 ( file1.txt) 中的每一行解释为用于匹配的模式”

根据您想要的结果和文件的内容,您可能还需要阅读-F-w选项。

如果您需要就地编辑文件,我认为您可以使用选项来执行此sed操作-f,但sed将文件的每一行解释为一个命令,而不是像那样的简单模式grep

相关内容