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

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

ただし、インストールされているパッケージに限定されません。

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

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


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

Answer

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

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

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

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

em>正規表現に一致:

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

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

回答

$ 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 

コメント

  • " |awk -F'/' 'NR>1{print $1}'をaptlistコマンドに追加"は" aptリストのみの名前の最短回答です"

回答

ここに1つの良い方法がありますのリストを取得しますかDebianベースのシステムで停止したパッケージ:

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

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

コメント

  • これは、バージョンごとにgrepする場合に機能します。この場合、aptitude searchapt listの回答は' tではありません。

回答

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

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

カラット (^) ii の後に(2)検索語の前にスペースを付けると、何も保証されません BEFORE 文字の組み合わせ以外は一致する可能性があります。

[[:space:]]は検索された用語に隣接します の直後にスペースを一致させるだけで、部分一致が発生しないようにします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です