grep 破坏了 systemctl 的格式

grep 破坏了 systemctl 的格式

如果我在不使用 grep 的情况下调用命令 systemctl,则格式看起来正确:

在此输入图像描述

现在我只想过滤带有“yarn”的行,但是这次行被分成两部分:

在此输入图像描述

当控制台宽两倍时也会发生同样的情况。我怎样才能解决这个问题?

答案1

systemctl的输出未发送到终端时,例如如果它通过管道传输到grep,那么它允许其输出的每一列根据需要增长以适应列表中最长的项目。这就是这里发生的情况:单元列表中的某些单元具有很长的名称,并且对齐所有单元的输出会在yarn.service和之间产生较大的空间loaded failed failed

要过滤单元输出,请使用systemctl的内置模式匹配:

sudo systemctl list-units '*yarn*'

您可以将输出限制为使用该grep选项获得的行--no-legend,避免使用该选项使用颜色和特殊字符--plain,并避免使用该选项启动寻呼机--no-pager

sudo systemctl list-units --plain --no-legend --no-pager '*yarn*'

您可以指定多个模式,结果将包括与任何模式的任何匹配:

sudo systemctl list-units --plain --no-legend --no-pager '*yarn*' '*hdfs*'

如果您想检索特定单位的状态,有更好的子命令;参见例如测试服务是否在脚本中运行的“正确”方法

相关内容