2017-03-01 4 views
0

私は" siva:x:503:505::/home/abc:/bin/bash "のような文字列を持っています。 503のみを変数に保存したいとします。どのように正規表現やsedコマンドを使用してそれを達成する。それとも他の方法でも可能ですか?sedや正規表現を使ってシェルスクリプト内の文字列を切り詰めるには?

+2

あなたが動作しないものを、試してみましたか? – Toto

+1

bash、powershell、ksh、zsh、csh、other? –

+0

'grep -oP '。*?:。*?:\ K。*?(?= :)'' –

答えて

0

myvar=$(echo "siva:x:50ds3:505::/home/abc:/bin/bash" | cut -d':' -f3); 
0

使用awk -F":" '{print $3}'

bash-4.2$ echo " siva:x:503:505::/home/abc:/bin/bash "|awk -F":" '{print $3}' 
503 
+0

Thanx Mate!非常にうまくいった:) –

1

私は以下のアプローチの変数

いずれかを使用してのみを格納したい:specifと

  • sedコマンドICの正規表現パターン: -

    number=$(echo " siva:x:503:505::/home/abc:/bin/bash " | sed -rn 's/[^0-9]*([0-9]+).*/\1/gp') 
    

    ([0-9]+)正規表現パターン[^0-9]*によって指定されたフィールドセパレータコマンド

  • awk桁の最初のシーケンスをキャプチャする:

    number=$(echo " siva:x:503:505::/home/abc:/bin/bash " | awk -F"[^0-9]*" '{print $2}') 
    

    -F"[^0-9]*" - 以外の配列を-digitsはフィールドセパレータと見なされます(フィールド番号を使用してすべての番号にアクセスする)


echo $number 

出力:

cutを使用して
503 
関連する問題