我过去成功地使用过 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'
消除马车,但这并没有帮助......
提前致谢
首先注意: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)