systemctlを使用してデバイス名のみを取得する方法は?

systemctlを使用してデバイス名のみを取得する方法は?

私がするとき

systemctl list-units --all --state=loaded

各セルの出力を列として取得します。

UNIT     LOAD   ACTIVE   SUB       DESCRIPTION  

UNIT入力と出力のみが必要です。

追加しようとしましたが、--property=UNITまだすべての列が印刷されます。試しましたが--output=json-pretty成功しませんでした。

出力で特定の単位を一致させる必要がありますが、正規表現が失敗するため、文字列を簡単に比較できるように単位リストのみを取得すると便利です。

私が使用する正規表現は次のとおりです。fgrep "input_from_user".service

正規表現やコマンドに関する提案がありますか?

ベストアンサー1

JSON出力があれば、jqPythonやJSONを理解するすべてのツールを使用できます。たとえば、フィルタリングを使用しますjq

systemctl list-units --output json |
  jq -r --arg pattern input_from_user '.[].unit | select(test($pattern))'

これは文書化されていませんが、2020年5月に追加された内容です表形式の出力をJSONに変換する一般的な機能は、で動作する必要がgit grep output_tableあることを意味します。list-unitslist-unit-fileslist-machines

例:

% systemctl list-units --output json | jq -r --arg pattern network '.[].unit | select(test($pattern))'
network-online.target
network.target

おすすめ記事