2017-09-20 2 views
1

sedやgrepを使って問い合わせたrpmパッケージのアーチとバージョンを表示するにはどうしたらいいですか?私は必要なものsedやgrepを使った正規表現

[[email protected] boot]# rpm -qa | grep kernel-devel 
kernel-devel-2.6.32-642.11.1.el6.x86_64 
kernel-devel-2.6.32-696.10.2.el6.x86_64 

は次のとおりです。

2.6.32-642.11.1.el6.x86_64 

私のsedにありませんか? =>sed 's/[^\.]\+\.//'

ありがとうございます!

+0

あなたのsedの作品を。あなたが得ている出力だけでなく、あなたが試している完全なコマンドラインを表示できますか? –

答えて

0

あなただけのgrepでそれを行うことができます。

rpm -qa | grep -P -o '(?<=kernel-devel-).*' 

説明:

  • -oが唯一の試合です。私。 grepは一致する部分のみを返します
  • -Pはperl正規表現モードです。ルックアラウンドが可能になります。
  • (?<=...)です。私。試合前のもの。これは試合の一部ではないので、-oはあまりにも助けることができるのsed、それにもちろん

を保持するつもりはない:

rpm -qa | grep 'kernel-devel' | sed 's/^[^.0-9]*-//g' 

説明:

  • ^は、開始と一致します文字列
  • [^.0-9]は、文字列の先頭からのドットでない数字以外の文字と一致します。これは私たちが必要としない部分です。
  • sedコマンドの//g結末は、空の文字列のawkで
+0

これは詳細な説明とその違いのおかげで素晴らしいです。それは非常に良い情報です。 –

1

ます。また、カット使用することができます。

rpm -qa | grep kernel-devel | cut -d \- -f 3-4 
+0

cool!それは役に立ちます!、出力結果から最初の行だけをどのように出力しますか? –

+0

@OutcastG add '|ヘッド ' – Maroun

+0

ああ、私は頭を使用することができます..私は試してみて..たくさんの@ andreas-hofmann –

1

あなたはこのようsedを使用して、余分なgrepアン避けることができた:

rpm -qa | sed '/kernel-devel/s/^[^0-9]*//' 

2.6.32-642.11.1.el6.x86_64 
2.6.32-696.10.2.el6.x86_64 
+1

うん、それは働いた!みんなありがとう! –

1

あなたsedは、最初の "2" の後の最初のドットを削除しますので、あなたが提供した正規表現にマッチします。

正規表現をより明示的にすることで簡単に修正できます。既に解決策を提案し

他の回答、ここgrepを使用して別の一つだ:

$ rpm -qa | grep -oP "devel-\K(.*)" 
2.6.32-642.11.1.el6.x86_64 
2.6.32-696.10.2.el6.x86_64 

\Kは試合の試みが(それはPerlが後読みのための提案の代替です)、この位置で開始することをふりをするエンジンに指示します。

0

一つと一致する部分を置き換える:

$ rpm -qa | awk 'match($0,/^kernel-devel-./){print substr($0,RLENGTH)}' 
2.6.32-642.11.1.el6.x86_64 
2.6.32-696.10.2.el6.x86_64 

を説明:私のために

match($0,/^kernel-devel-./) { # if the record starts with kernel-devel-[ANYTHING] 
    print substr($0,RLENGTH)  # print starting from the [ANYTHING] 
}