我可能需要一些关于即时构建单行脚本的帮助。该脚本应该给我一个在当前系统上运行的服务列表。我想用 systemctl 来实现这一点。
当前的 oneliner 如下所示:
systemctl list-units --type service | grep -f /etc/update-motd.d/service.list
但是,此命令总是在列出的服务之间创建一个空行
smbd.service loaded active running Samba SMB Daemon
uuidd.service loaded active running Daemon for generating UUIDs
virtlogd.service loaded active running Virtual machine log manager
zabbix-agent.service loaded active running Zabbix Agent
我想删除空格。经过一些谷歌研究后,我找到了一些带有 tr 的解决方案(如 'tr -d ""' 或 'tr -s ""'),但这似乎不起作用。我什至用 grep 或 sed 尝试了一些解决方案,但没有一个对我有帮助。
编辑:我尝试了以下解决方案但没有成功:| grep“。” | sed '/^$/d | grep "\S"
一些帮助会很棒!谢谢
你可以尝试这样的事情:
systemctl list-units --type service | grep -f /etc/update-motd.d/service.list | grep -v ^$
这应该删除任何空行tr
用于挤压换行符:您看到的不是空行 - 它们是很长的尾随空格字符序列,似乎是
systemctl
表格输出的一部分:由于终端包装,它们显示为空行。
您可以使用 删除它们
tr
,例如通过挤压水平空格:另一种更好地保留表格格式的选项是仅删除尾随空格:
应该有一种方法可以停止
systemctl
尝试格式化输出(或至少响应COLUMNS
环境变量),但我找不到它。