【问题标题】:Search text for matching strings to print line AND matching string搜索文本以查找匹配字符串以打印行 AND 匹配字符串
【发布时间】:2018-04-09 05:32:28
【问题描述】:

我正在使用 awk 在大文本中搜索匹配的字符串。我的目标是打印匹配的字符串、行号和匹配的行。我无法实现第一部分(即打印匹配的字符串)。

目前我有:

awk '/string1/string2/string3/{ print NR, $0 }' file_to_search.txt

这会产生行号和匹配的行,但不会产生匹配的字符串。

感谢任何帮助。

【问题讨论】:

  • /string1/string2/string3/ 不是有效的正则表达式。您是否正在搜索 string1string2string3 的测试?

标签: regex string awk sed grep


【解决方案1】:

您的问题不清楚,但听起来这可能是您想要的:

awk 'match($0,/regexp/){ print substr($0,RSTART,RLENGTH), NR, $0 }' file_to_search.txt

【讨论】:

    【解决方案2】:

    使用 grep,您可以获取行号和匹配的字符串或完整的行(据我所知)

    grep -wnoF "string1
    string2
    string3" infile
    

    使用 awk,你可以得到你想要的东西

    awk '
    function findmatch(s,  i) {
     for (i=1;i<=NF;i++)
      {if ($i == s)
       {print "find string = "s,"on line number = "FNR,"Complete line = "$0}};
    }
    s1{findmatch(s1)}
    s2{findmatch(s2)}
    s3{findmatch(s3)}
    ' s1='string1' s2='string2' s3='string3' infile
    

    【讨论】:

    • 您的grep command,如所写,没有产生所需的输出,即匹配字符串行号,和匹配行,只有行号匹配字符串,这甚至不是正确的顺序。
    • 您显然没有抓住重点,这就是为什么发布一个无论如何都不能提供所需输出的解决方案!您的答案的grep 部分不应该在那里。此外,IMO 你的awk 命令是不必要的冗长和更复杂,然后需要得到表达的期望结果。另一个答案更简单,可以准确地产生所要求的内容。虽然要匹配 OP,它需要用作 awk 'match($0,/regexp|regexp|regexp/){ print substr($0,RSTART,RLENGTH), NR, $0 }' file_to_search.txt,但它可以工作并产生规定的所需输出。
    • 是的,你是正确的 grep。使用 awk,尝试在一行上使用 nostring11,在另一行使用 string1 和 string2,然后返回。
    猜你喜欢
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 2015-07-06
    • 2015-01-18
    • 2017-07-04
    相关资源
    最近更新 更多