web-dev-qa-db-ja.com

シェルスクリプトで情報を抽出する正規表現

シェルスクリプトのシェルコマンド出力の特定の部分をgrepします。

$ uname -r
>> 3.14.37-1-lts

3.14.37が必要なところ。

また、値が「-jwl35」のシェルスクリプト変数VERSIONについても、値「jwl35」のみを取得します。

シェルスクリプトでこれに正規表現を使用するにはどうすればよいですか?

前もって感謝します!

5
Jialun Liu

多くの、多くの方法。ここにいくつかあります:

  1. GNU Grep

    $ echo 3.14.37-1-lts | grep -oP '^[^-]*'
    3.14.37
    
  2. sed

    $ echo 3.14.37-1-lts | sed 's/^\([^-]*\).*/\1/'
    3.14.37
    
  3. Perl

    $ echo 3.14.37-1-lts | Perl -lne '/^(.*?)-/ && print $1
    3.14.37
    

    または

    $ echo 3.14.37-1-lts | Perl -lpe 's/^(.*?)-.*/$1/'
    3.14.37
    

    または

    $ echo 3.14.37-1-lts | Perl -F- -lane 'print $F[0]'
    3.14.37
    
  4. awk

    $ echo 3.14.37-1-lts | awk -F- '{print $1}'
    3.14.37
    
  5. cut

    $ echo 3.14.37-1-lts | cut -d- -f1
    3.14.37
    
  6. シェルでも!

    $ echo 3.14.37-1-lts | while IFS=- read a b; do echo "$a"; done
    3.14.37
    
13
terdon