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

use*_*194 3 linux grep shell-script telnet

telnet test | grep -o Unable
telnet: Unable to connect to remote host: Connection refused
Run Code Online (Sandbox Code Playgroud)

只有“无法”应该是结果。

Kus*_*nda 5

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

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

telnet test 2>&1 | grep -o Unable
Run Code Online (Sandbox Code Playgroud)

这将合并两个流grep并将作为合并的数据流。

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

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

echo 'telnet ran successfully'
Run Code Online (Sandbox Code Playgroud)

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