8

我正在使用该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
4

2 回答 2

12

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

于 2012-05-31T11:56:59.847 回答
6

嗯,有很多可能的解决方案。您grep要查找所有包含 3 的行,而 '8::3rr' 行实际上包含 3。因此您需要更具体地查找您要查找的内容。

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

^1:
^2:
^3:
^4:
^5:
于 2012-05-31T12:01:18.560 回答