【问题标题】:Using AWK on a command to receive a part of its output在命令上使用 AWK 以接收其部分输出
【发布时间】:2014-05-08 21:33:49
【问题描述】:

我正在尝试使用 awk 提取其输出的一部分并将其分配给一个变量,但我无法让 AWK 工作。

这是我正在运行的命令:

nc -v -z 192.168.8.216 9100 | awk '{print $NF}'

这是输出

Connection to 192.168.8.216 9100 port [tcp/*] succeeded!

我想要实现的只是输出

succeeded

我只想要命令的最后一部分,以便我可以将它分配给一个变量并运行一个 if 语句。

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    该命令似乎将输出发送到STDERR,而不是STDOUT

    STDERRSTDOUT 合并:

    nc -v -z 192.168.8.216 9100 2>&1 | awk '{print $NF}'
    

    我只想要命令的最后一部分,以便我可以将它分配给 变量并运行 if 语句。

    如果目的是简单地确定命令产生了单词成功,则不需要变量:

    [[ $(nc -v -z 192.168.8.216 9100 2>&1) =~ succeeded ]] && echo "Yes"
    

    如果您也想匹配 ! 并确保它位于行尾:

    [[ $(nc -v -z 192.168.8.216 9100 2>&1) =~ succeeded\!$ ]] && echo "Yes"
    

    【讨论】:

    • 会成功还是成功!
    • @realspirituals 默认情况下,字段会按空格分割,因此会成功!
    • 是的。但在 OP 的示例中,最后一个值是 succeeded!。无论如何 +1 的答案
    • @realspirituals 用检查字符串的选项更新了答案。
    【解决方案2】:

    尝试使用退出状态:

    nc -v -z 192.168.8.216 9100 && echo 'Yes' || echo 'No'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      相关资源
      最近更新 更多