关于“grep -f”:使用文件匹配模式

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

我尝试过使用grep "more patt.txt" file.txt | awk -F '::' '{ print $1 " "$2}',但这也给了我同样的问题。 - ana
2个回答

11

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


4
请注意,如果数字变得如此大,^1将匹配10:等。 - Mark Reed

6
好的,有许多可能的解决方案。你告诉grep查找所有包含数字3的行,而行'8::3rr'确实包含数字3。所以你需要更具体地说明你要查找什么。
例如,你可以将模式更改为“1:”、“2:”等,以仅匹配后跟冒号的数字。或者你可以将它们更改为“^1”、“^2”等,以仅匹配行首的数字。这取决于你的数据,但很可能你需要两者都要,这样你搜索“1:”就不会匹配“21:”,你搜索“^5”也不会匹配“53:”。在这种情况下,你的模式文件应该像这样:
^1:
^2:
^3:
^4:
^5:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接