egrep 输出所有内容,而不仅仅是与列表中的模式匹配的行

egrep 输出所有内容,而不仅仅是与列表中的模式匹配的行

我过去曾成功使用过egrep,通常使用以下内容

egrep -f list_of_patterns big_file_to_look_for_patterns > selected_patterns_from_big_file

然而,今天早上我一直在尝试做同样的事情,但我不断地将所有内容作为输出 -> 不仅是我通过列表提供的模式,还有我正在查找的整个文件

文件可以在这里找到:https://filebin.net/ibovbjy68x4a8kez

模式列表:“allMAGs_list_85_5_list”

big_file_to_look_for_patterns:“好文件”

根据之前有人对 grep 有类似问题的帖子,我试图tr '\r' '\n'消除回车,但这没有帮助......

提前致谢

答案1

首先注释:egrep已弃用,可能会在某个时候删除,请grep -E改为使用。现在你的问题是你的模式文件包含空行。因此,grep 正在寻找在所有行中找到的空字符串,因此返回所有结果。你可以在这里看到同样的事情:

$ seq 10 | grep "" 
1
2
3
4
5
6
7
8
9
10

只需从文件中删除空行,然后重试:

sed '/^$/d' allMAGs_list_85_5_list > fixed.list
grep -Ef fixed.list goodfile 

您还可以使用以下命令修复原始列表文件

sed -i '/^$/d' allMAGs_list_85_5_list

或者即时执行

grep -Ef <(sed '/^$/d' allMAGs_list_85_5_list) goodfile 

相关内容