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

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

私は(非常に新しい)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

答え2

aptitude正規表現を使用して、無関係な出力なしでパッケージ管理ツールに知られているすべてのパッケージ(インストール済みパッケージまたは他のパッケージ)を取得することをサポートし、出力形式を指定する方法を知ることができます。

aptitude search "linux-image-.*"

インストールされたパッケージのみをリストします。

aptitude search "linux-image-.* ~i"

インストールされたパッケージのみを一覧表示名前正規表現の一致:

aptitude search "linux-image-.* ~i" -F "%p"

この記事では、以下を扱います。利用可能な検索モードそして出力書式指定子詳細。このウェブサイトで次の例を見つけることもできます。適性で正規表現を使用する方法はありますか?適性を備えた正規表現2部Linux - aptのみを使用したセキュリティ更新プログラムの表示またはアップグレード

答え3

これは、Debianベースのシステムにインストールされているパッケージのリストを入手するのに最適な方法です。

dpkg -l | grep ^ii | awk '{print $2}'

出力ラインはdpkg -l正常であると信頼できます。パターンは^iiインストールされたパッケージと行を一致させ、単純なAwkはパッケージ名(apt-get installコマンドで使用されているのと同じ名前)の2番目の列を抽出します。パッケージ名にスペースを含めることはできないため、これは安全な操作です。

答え4

用語を検索するときに「キャッチ」するにはgrep平らな包装袋検索語を囲む必要がある出力は次のとおりです。 」" はサンプルクエリとして使用されます。

dpkg -l |grep "^ii  git[[:space:]]"

これカラット(^)二つ、(2)スペースの後に検索語の前に何も追加します。今後この文字の組み合わせ以外の文字と一致することがあります。

この[[:space:]]クエリは空白のみを即時に一致させ、部分一致を防止します。後ろにそれ。

関連情報