Я мог нуждаться в некоторой помощи с коротким сценарием, который я создаю. Сценарий должен дать мне список сервисов, которые работают на существующей системе. Я хотел понять это с systemctl.
Текущая острота похожа на это:
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
Я хотел бы удалить вакуумы. После некоторого исследования Google я нашел некоторые решения с TR (как 'TR-d ""' или 'TR-s ""'), но это, кажется, не работает. Я даже попробовал некоторые решения grep или sed, но ни один из них не помог мне wih это.
править: следующие решения я попробовал без успеха: | grep"." | sed '/^ $/d | grep "\S"
Некоторая справка была бы большой!Спасибо
Можно попробовать что-то вроде этого: systemctl list-units --type service | grep -f /etc/update-motd.d/service.list | grep -v ^$
Это должно удалить любые emtpy строки
Используя tr
сжимать новые строки:
$ systemctl list-units --type service | \
grep -f <(tr < /etc/update-motd.d/service.list -s \\n)
Что Вы видите, не пустые строки - они долго запаздывают последовательности пробелов, которые, кажется, часть systemctl
табличный вывод:
$ systemctl list-units --type service | grep bluetooth | xxd
00000000: 626c 7565 746f 6f74 682e 7365 7276 6963 bluetooth.servic
00000010: 6520 2020 2020 2020 2020 2020 2020 2020 e
00000020: 2020 2020 2020 2020 2020 2020 2020 2020
00000030: 2020 2020 2020 2020 2020 2020 2020 2020
00000040: 2020 2020 2020 2020 2020 2020 2020 2020
00000050: 2020 2020 2020 2020 2020 6c6f 6164 6564 loaded
00000060: 2061 6374 6976 6520 7275 6e6e 696e 6720 active running
00000070: 426c 7565 746f 6f74 6820 7365 7276 6963 Bluetooth servic
00000080: 6520 2020 2020 2020 2020 2020 2020 2020 e
00000090: 2020 2020 2020 2020 2020 2020 2020 2020
000000a0: 2020 2020 2020 2020 2020 2020 2020 2020
000000b0: 2020 2020 2020 2020 2020 2020 200a .
Они появляются как пустые строки из-за обертывания терминалом.
Можно удалить их с tr
, например, путем сжатия горизонтального пробела:
$ systemctl list-units --type service | tr -s '[:blank:]' | grep -f service.list
bluetooth.service loaded active running Bluetooth service
cron.service loaded active running Regular background program processing daemon
polkit.service loaded active running Authorization Manager
Другая опция, которая сохраняет табличный формат лучше, состояла бы в том, чтобы удалить только конечные пробелы:
$ systemctl list-units --type service | sed 's/ *$//' | grep -f service.list
bluetooth.service loaded active running Bluetooth service
cron.service loaded active running Regular background program processing daemon
polkit.service loaded active running Authorization Manager
Должен быть способ остановиться systemctl
от попытки отформатировать вывод (или по крайней мере быть быстро реагирующим к COLUMNS
переменная среды), но я не могу найти его.