【问题标题】:About 'grep -f': match pattern with file关于'grep -f':将模式与文件匹配
【发布时间】:2012-05-31 11:55:09
【问题描述】:

我正在使用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}' 但这也给了我同样的问题。

标签: grep


【解决方案1】:

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

【讨论】:

  • 请注意 ^1 将匹配 10: 等,如果数字变得那么大。
【解决方案2】:

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

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

^1:
^2:
^3:
^4:
^5:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    相关资源
    最近更新 更多