web-dev-qa-db-ja.com

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

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

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

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


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

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

aptitude search "linux-image-.*"

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

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

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

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

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

8
Stephen Kitt

Debianベースのシステムにインストールされているパッケージのリストを取得する良い方法の1つは次のとおりです。

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

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

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

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

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

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

carat(^)iiの後に(2)スペース検索語を先頭に追加しても、何も保証されません[〜#〜] before [〜#〜]それは、文字の組み合わせが一致できることを除いて、.

[[:space:]]検索された用語に隣接すると、スペースの一致のみがすぐに行われるため、部分一致は発生しません[〜#〜] after [〜#〜] it。

1
F1Linux