有没有办法从bash中的命令输出中获取特定的单词?

有没有办法从bash中的命令输出中获取特定的单词?,bash,Bash,例如,在运行dpkg命令时 dpkg -s autofs 我会得到这样的输出 dpkg查询:未安装软件包“autofs”,且没有可用信息 但我只想得到 未安装 部分,以便我可以在脚本中进一步使用它。有没有命令可以帮助我使用它?首先,单词not installed是特定于语言环境的,因此除了英语语言环境外,任何其他语言都会失败。它也是不可预测的,因为它不是已发布的API应用程序编程接口 因此,即使采取了一些预防措施,也不要使用: LC_MESSAGES=C dpkg查询——状态自动FS 2>&1

例如,在运行dpkg命令时

dpkg -s autofs
我会得到这样的输出

dpkg查询:未安装软件包“autofs”,且没有可用信息

但我只想得到

未安装


部分,以便我可以在脚本中进一步使用它。有没有命令可以帮助我使用它?

首先,单词
not installed
是特定于语言环境的,因此除了英语语言环境外,任何其他语言都会失败。它也是不可预测的,因为它不是已发布的API应用程序编程接口

因此,即使采取了一些预防措施,也不要使用:

LC_MESSAGES=C dpkg查询——状态自动FS 2>&1 | grep-o“未安装”
改为检查
dpkg查询
命令的返回状态:

#/副秘书长/垃圾箱/环境卫生
package='autofs'
如果dpkg查询——状态“$package”>/dev/null 2>&1;然后
已安装printf程序包%s\n.“$package”
其他的
未安装printf软件包%s\n.“$package”
fi

使用
-o
选项将管道连接到
grep
。此外,由于该错误可能会转到stderr,因此在管道传输时需要将stderr重定向到stdout:
command1 2>&1 | command2
它很可能返回错误代码,您可以检查状态,而不是查找特定字符串。