我过去曾成功使用过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