【问题标题】:REGEX using gawk command使用 gawk 命令的正则表达式
【发布时间】:2022-11-29 05:54:07
【问题描述】:

在 Linux 中,我正在运行命令“pmap -x $PID | tail -n 1”

这给了我如下一行:

total kB         168194812  870692  852296

我正在尝试提取第二个数字 (rss) 以供使用。我发现这个例子在 regex101.com 中有效:

/[^\d]*[\d]+[\s]+([\d]+)/

但是,当我尝试针对我的文本行运行它时,我没有得到任何打印输出:

echo "total kB         168194812  870692  852296" | gawk 'match($0, /[^\d]*[\d]+[\s]+([\d]+)/, a) {print a[1]}'

我期待它打印

870692

【问题讨论】:

    标签: linux awk


    【解决方案1】:

    只显示第 4 个字段怎么样

    awk '{print $4}'
    

    以你的例子

    echo "total kB         168194812  870692  852296" | awk '{print $4}'
    

    回报

    870692
    

    【讨论】:

      【解决方案2】:

      像这样:

      $ echo "total kB         168194812  870692  852296" |
          gawk 'match($0, /[^[0-9]]*[0-9]+s+([0-9]+)/, a) {print a[1]}'
      870692
      

      表达式 d 是特定的 Perl/PCRE 兼容正则表达式。像 Python 这样的一些语言也使用它。

      您可以简化为:

      awk '{print $4}' <<< "total kB         168194812  870692  852296"
      

      使用

      grep -oP 'd+(?=s+d+$)' <<< "total kB         168194812  870692  852296" 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 2013-08-07
        • 1970-01-01
        • 2012-10-29
        • 2015-08-27
        相关资源
        最近更新 更多