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

Pan*_*nos 3 grep

我过去成功地使用过 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: "goodfile"

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

提前致谢

ter*_*don 6

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

$ seq 10 | grep "" 
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

只需从文件中删除空行并重试:

sed '/^$/d' allMAGs_list_85_5_list > fixed.list
grep -Ef fixed.list goodfile 
Run Code Online (Sandbox Code Playgroud)

您还可以修复原始列表文件

sed -i '/^$/d' allMAGs_list_85_5_list
Run Code Online (Sandbox Code Playgroud)

或即时进行

grep -Ef <(sed '/^$/d' allMAGs_list_85_5_list) goodfile 
Run Code Online (Sandbox Code Playgroud)