我正在使用grep -f
函数从文件中提取与特定模式匹配的行。假设我的模式文件是pattern.txt
,如下所示。
1
2
3
4
5
我匹配此模式的文件是file.txt
,
1::anv
2::tyr
3::yui
4::fng
5::gdg
6::ere
7::rer
8::3rr
9::gty
现在,当我执行grep -f pattern.txt file.txt时,我得到了这个 - >
1::anv
2::tyr
3::yui
4::fng
5::gdg
8::3rr
上面输出中的最后一行导致了我的问题。如何修改此grep命令以获得输出(显示正确的对应关系),如下所示?
1::anv
2::tyr
3::yui
4::fng
5::gdg
答案 0 :(得分:12)
在您的模式之前添加^
,以便grep
与您的模式的第一行匹配。如果您的模式实际上是数字集,则不需要模式列表。只需使用^[1-5]:
。
答案 1 :(得分:6)
嗯,有很多可能的解决方案。你告诉grep
找到包含3的所有行,而'8 :: 3rr'行确实包含3.所以你需要更具体地了解你正在寻找的东西。
例如,您可以将模式更改为“1:”,“2:”等,以仅匹配后跟冒号的数字。或者您可以将它们更改为“^ 1”,“^ 2”等,以仅匹配行开头的数字。这取决于您的数据,但可能您需要两者,因此您搜索“1:”与“21:”不匹配,而搜索“^ 5”与“53:”不匹配。在这种情况下,您的模式文件将如下所示:
^1:
^2:
^3:
^4:
^5: