如果我这样做,service --status-all
我会得到如下结果:
[ ? ] webmin
[ ? ] whoopsie
[ + ] winbind
[ - ] x11-common
我只想显示正在运行的 ([ + ]),所以我这样做了
service --status-all | grep +
它会突出显示它们,但是我如何让它排除其他行?
另外,这显示的是实际正在运行的服务还是仅显示计划在启动时运行的服务?
答案1
您可以使用选项或更改周围行输出的数量grep
(称为“上下文”)。-C [num]
--context=[num]
通常,的默认选项grep
是不打印上下文,因此您使用的命令应该没问题。您可以通过 强制它仅显示匹配的行service --status-all | grep + -C 0
。
要排除匹配的行,请使用-v
或--invert-match
。因此,您可以通过管道传输原始命令| grep -v '[ ?' | grep -v '[ -'
以删除状态为-
或?
的行。您还可以使用转义的“或”(管道符号)组合多个匹配字符串,例如grep -v '[ ?\|[ -'
。
但是,service
由于某种原因,将其输出定向到stderr
而不是正常的stdout
,因此输出流需要与 结合|&
才能grep
正常工作。因此,此处的工作命令将是service --status-all |& grep +
。