grepで-vと-Bスイッチを組み合わせる方法は?

grepで-vと-Bスイッチを組み合わせる方法は?

現在インストールされているカーネルのリストがあり、現在インストールされているカーネルと以前にインストールされたカーネルを特定しようとしています。この例では、linux-image-3.2.0-60-genericは現在実行中のカーネルで、インストールされているカーネルは次のようになります。

linux-image-3.2.0-49-generic
linux-image-3.2.0-51-generic
linux-image-3.2.0-52-generic
linux-image-3.2.0-53-generic
linux-image-3.2.0-54-generic
linux-image-3.2.0-55-generic
linux-image-3.2.0-56-generic
linux-image-3.2.0-57-generic
linux-image-3.2.0-58-generic
linux-image-3.2.0-59-generic
linux-image-3.2.0-60-generic
linux-image-3.2.0-61-generic
linux-image-3.2.0-63-generic
linux-image-3.2.0-64-generic

grep -v $(uname -r)このリストから現在実行中のカーネルを削除するために使用できます。ただし、grep -v -B 1 $(uname -r)リストから現在および前のコアを削除できないようです。-Bとを組み合わせる方法はありますか-v?それとも完全に間違った方向から接近しているのでしょうか?

ベストアンサー1

2 grepを使って欲しいものを得ることができます。内部的には、現在のカーネルと以前のバージョンのgrep一致する「リスト」が生成されます。uname -r外部では、grepこの2つのコアを除くリストを提供します。

$ grep -v "$(grep -B 1 "$(uname -r)" list.txt)" list.txt

はい

あなたが持っているものをシミュレートするためにそれをファイルに追加しましたlist.txt

$ cat list.txt 
linux-image-3.2.0-49-generic
linux-image-3.2.0-51-generic
linux-image-3.2.0-52-generic
linux-image-3.2.0-53-generic
linux-image-3.2.0-54-generic
linux-image-3.2.0-55-generic
linux-image-3.2.0-56-generic
linux-image-3.2.0-57-generic
linux-image-3.2.0-58-generic
linux-image-3.2.0-59-generic
linux-image-3.2.0-60-generic
linux-image-3.2.0-61-generic
linux-image-3.2.0-63-generic
linux-image-3.2.0-64-generic

それでは、コマンドが次の文字列を返すとしますuname -r

$ uname -r
3.2.0-60-generic

uname -rしたがって、このコマンドを実行すると、以前のバージョンを除いたカーネルのリストが表示されます。

$ grep -v "$(grep -B 1 "3.2.0-60-generic" list.txt)" list.txt 
linux-image-3.2.0-49-generic
linux-image-3.2.0-51-generic
linux-image-3.2.0-52-generic
linux-image-3.2.0-53-generic
linux-image-3.2.0-54-generic
linux-image-3.2.0-55-generic
linux-image-3.2.0-56-generic
linux-image-3.2.0-57-generic
linux-image-3.2.0-58-generic
linux-image-3.2.0-61-generic
linux-image-3.2.0-63-generic
linux-image-3.2.0-64-generic

これはすべてカーネルリストがlist.txtソートされた形式であると仮定します。

追加のヒント

興味があれば、このQ&Aに次のような回答を書きました。インストールされているトップバージョンのカーネルRPMをプログラムで確認するには?私はそれを使用する方法を示していますsort -V

おすすめ記事