【问题标题】:How to print regexp matches using `awk`? [duplicate]如何使用`awk`打印正则表达式匹配? [复制]
【发布时间】:2011-07-24 21:31:44
【问题描述】:

有没有办法在 shell 中使用awk 命令打印正则表达式匹配(但仅匹配字符串)?

【问题讨论】:

    标签: bash shell awk


    【解决方案1】:

    是的,在awk 中使用match() 函数并为其提供可选的数组参数(在我的示例中为a)。当你这样做时,第 0 个元素将是匹配正则表达式的部分

    $ echo "blah foo123bar blah" | awk '{match($2,"[a-z]+[0-9]+",a)}END{print a[0]}'
    foo123
    

    【讨论】:

    • 我知道 grep -o,它必须在 AWK 中 :)
    • 我得到错误:awk: 源代码第 1 行上下文的语法错误是 >>> {match($2,"[az]+[0-9]+",
    • 哦,是gawk...来自stackoverflow.com/questions/5536018/…“只有三个参数的awk match()函数只存在于gawk”
    • 也就是说,这并不能回答问题。
    • 对于那些有兴趣使用这个 gawk 特定匹配功能的人,看起来 3-arg 版本的 match 直到 3.1 才添加到 gawk:gnu.org/software/gawk/manual/html_node/Feature-History.html 遗憾的是,最新的 Git Bash 环境是使用 3.0.4。
    【解决方案2】:

    解决方案的特定于awk(而不是使用gawk)的实现:

    $ echo "blah foo123bar blah" | awk 'match($0,/[a-z]+[0-9]+/) {print substr($0,RSTART,RLENGTH)}'
    foo123
    

    【讨论】:

      【解决方案3】:

      我经常使用这种结构:

      split(substr($0, match($0, /[0-9]+ [Bb]ytes/)), a, " ");
      print a[1];
      

      【讨论】:

        猜你喜欢
        • 2011-07-29
        • 1970-01-01
        • 2022-10-17
        • 2015-02-24
        • 2017-04-13
        • 2014-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多