(かなり最近の)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
コメント
回答
ここに1つの良い方法がありますのリストを取得しますかDebianベースのシステムで停止したパッケージ:
dpkg -l | grep ^ii | awk "{print $2}"
dpkg -l
の出力行は正常であると信頼できます。パターン^ii
はインストールされたパッケージの行と一致し、単純なAwkは2番目の列であるパッケージ名(apt-get install
コマンド)。パッケージ名に空白を含めることはできないため、これも安全な操作です。
コメント
- これは、バージョンごとにgrepする場合に機能します。この場合、
aptitude search
とapt list
の回答は' tではありません。
回答
<の場合、検索された用語を「トラップ」するためem> grep ping dpkg output、次のように検索語を囲む必要があります。 「 git 」は、標本検索用語として使用されます:
dpkg -l |grep "^ii git[[:space:]]"
カラット (^) ii の後に(2)検索語の前にスペースを付けると、何も保証されません BEFORE 文字の組み合わせ以外は一致する可能性があります。
[[:space:]]
は検索された用語に隣接します の直後にスペースを一致させるだけで、部分一致が発生しないようにします。
|awk -F'/' 'NR>1{print $1}'
をaptlistコマンドに追加"は" aptリストのみの名前の最短回答です"