关于'grep -f':匹配模式与文件

ana*_*ana 8 grep

我正在使用该grep -f函数从文件中提取与特定模式匹配的行.假设我的模式文件pattern.txt如下所示.

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

我匹配此模式的文件是file.txt,

1::anv
2::tyr
3::yui
4::fng
5::gdg
6::ere
7::rer
8::3rr
9::gty
Run Code Online (Sandbox Code Playgroud)

现在,当我执行grep -f pattern.txt file.txt时,我得到了这个 - >

1::anv
2::tyr
3::yui
4::fng
5::gdg
8::3rr
Run Code Online (Sandbox Code Playgroud)

上面输出中的最后一行是导致我的问题.如何修改此grep命令以获取输出(显示正确的对应关系),如下所示?

1::anv
2::tyr
3::yui
4::fng
5::gdg
Run Code Online (Sandbox Code Playgroud)

Pri*_*ley 12

^在您的模式之前添加,以便grep与您的模式的行开头匹配.如果您的模式实际上是数字集,则不需要模式列表.只是用^[1-5]:.

  • 只要知道^ 1将匹配10:等等,如果数字变得那么大. (4认同)

Mar*_*eed 6

嗯,有很多可能的解决方案.你告诉你grep找到包含3的所有行,而'8 :: 3rr'行确实包含3.所以你需要更具体地了解你正在寻找的东西.

例如,您可以将模式更改为"1:","2:"等,以仅匹配后跟冒号的数字.或者您可以将它们更改为"^ 1","^ 2"等,以仅匹配行开头的数字.这取决于您的数据,但可能您需要两者,因此您搜索"1:"与"21:"不匹配,而搜索"^ 5"与"53:"不匹配.在这种情况下,您的模式文件将如下所示:

^1:
^2:
^3:
^4:
^5:
Run Code Online (Sandbox Code Playgroud)