我想从命令输出中打印确切的单词

我想从命令输出中打印确切的单词
telnet test | grep -o Unable
telnet: Unable to connect to remote host: Connection refused

结果应该只有“无法”。

答案1

telnet无法连接时输出的错误信息打印到标准错误溪流。默认情况下,标准错误流直接发送到终端。您只能通过管道传输标准输出流到其他命令(grep在本例中)。

您可以通过重定向的方式将错误流发送到标准输出流:

telnet test 2>&1 | grep -o Unable

这将合并两个流并grep充当合并的数据流。

如果您想捕获 中的错误情况telnet,也可以使用该实用程序的退出状态:

if ! telnet test 2>/dev/null; then
    echo 'something went wrong with telnet'
    exit 1
fi

echo 'telnet ran successfully'

telnet如果返回非零退出状态(表示某种失败),这将退出脚本。我还重定向了错误流以/dev/null将其完全丢弃。

答案2

看起来该消息已打印到 stderr,因此请执行以下操作:

telnet test 2>&1 | grep -o Unable

在 bash 和 ZSH 中,您还可以使用|&

telnet test |& grep -o Unable

相关内容