パターンに一致するインストール済みパッケージのリストを取得する正しい方法は何ですか?

パターンに一致するインストール済みパッケージのリストを取得する正しい方法は何ですか?

私は(非常に新しい)Debianベースのディストリビューションを実行しています。

特定のパターンに一致するインストール済みのすべてのパッケージの簡単なリストを生成したいと思います。次のように実行してこれを実行できます。

apt list --installed "linux-image-*" | cut -d/ -f1

しかし、次のように気にしない行が表示されます。

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Listing...

したがって、使用しないことをお勧めしますapt。次のようにdpkg-queryを実行できます。

dpkg-query --showformat='${Package}\n' --show "linux-image*"

ただし、これはインストールされたパッケージに限定されません。私は利用できる

dpkg-query --list "linux-image-*" | grep "ii"

しかし、テキスト処理をたくさんする必要がありますが、このスペースを誰が信じることができますか?

したがって、結論は次のようになります。正しいパターンに一致するインストール済みパッケージのリストを取得するには?


ノート:

  • シェルグローブだけでなく、適切な正規表現になることができればボーナスポイントです。
  • テキストを解析するのは理想的な解決策ではないようです。それがあなたが提案するものなら、なぜ良い方法がないのかを説明してください。

ベストアンサー1

$ apt list --installed "linux-image-*" 2>/dev/null |awk -F'/' 'NR>1{print $1}'
linux-image-3.16.0-4-amd64
linux-image-4.11.0-1-amd64
linux-image-4.12.0-1-amd64
linux-image-4.13.0-1-amd64
linux-image-4.8.0-2-amd64
linux-image-4.9.0-1-amd64
linux-image-4.9.0-2-amd64
linux-image-4.9.0-3-amd64

正規表現について話す:

$ apt list --installed "linux-image-*" 2>/dev/null |awk -F'/' 'NR>1 && $0~/4.1/{print $1}'
linux-image-4.11.0-1-amd64
linux-image-4.12.0-1-amd64
linux-image-4.13.0-1-amd64

パッケージ名なしで呼び出すと、デフォルトでインストールされているパッケージのみを一覧表示するdpkg-query(--showformat)オプションを使用できます。-f

$ dpkg-query -f '${Package}\n' -W |grep 'linux-image' #-W == --show

おすすめ記事