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


11

私は(かなり最近の)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"

しかし、私はたくさんのテキスト処理を行う必要があります、そして誰がそれらのスペースを信頼できるのでしょう?

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


  • ボーナスは、それが単なるシェルグロブではなく適切な正規表現である場合に役立ちます。
  • テキストを解析する必要があるのは、理想的とは言えない解決策のようです。それがあなたの提案するものであるなら、なぜより良い方法がないのか議論してください。

回答:


8

aptitude インストールされているかどうかに関係なく、パッケージ管理ツールが認識しているすべてのパッケージの中から、無関係な出力なしに正規表現を使用して検索をサポートし、その出力のフォーマット方法を通知できます。

aptitude search "linux-image-.*"

インストールされているパッケージのみを一覧表示するには:

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

正規表現に一致するインストール済みパッケージのみを一覧表示するには:

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

ドキュメントでは、利用可能な検索パターン出力フォーマット指定子について詳しく説明しています。このサイトには例も掲載されています。たとえば、aptitudeで正規表現を使用する方法はありますか?aptitudeパート2の正規表現、およびLinux-aptのみを使用してセキュリティ更新を表示またはアップグレードします


6

Debianベースのシステムにインストールされているパッケージのリストを取得する方法の1つを次に示します。

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

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


これは、バージョンごとにgrepしたいときに機能します。この場合の答えはaptitude searchapt listそうではありません。
Hi-Angel

6
$ 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

(--showformat)オプションdpkg-queryとともに使用することもでき-fます。これは、パッケージ名なしで呼び出された場合、デフォルトではインストール済みのパッケージのみがリストされます。

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

1

grep ping dpkgの出力時に検索語を「トラップ」するには、次のように検索語を囲む必要があります。「git」は標本検索用語として使用されます。

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

カラット(^)II、検索用語を付加(2)に続くスペースは何も保証しません前に、それは他の文字の組み合わせが一致することができるよりも。

[[:space:]]のみ直ちにスペースを照合することによって発生する用語不可能に部分一致を検索当接AFTERこと。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.