2016-06-13 16 views
0

には、私は現在、変数にコマンドライン出力を保存するbashスクリプトを持っています。最後のコロン(:)の後ろのすべてを抽出する正規表現を実行したいと思います。正規表現コマンドライン出力のbashの

これは私のコードです:

line="$(command line)" 
echo "$line" | awk '/[^:]+$/' 

これは、残念ながら動作しません。どのように修正する必要がありますか?

答えて

3
GNUのbashのでは

とそのParameter Expansion

line="root:x:0:0:root:/root:/bin/bash" 
echo "${line/*:/}" 

出力:GNUのbashのと正規表現で

 
/bin/bash 

line="root:x:0:0:root:/root:/bin/bash" 
[[ $line =~ ([^:]*)$ ]] && echo "${BASH_REMATCH[1]}" 

出力:

 
/bin/bash 
+2

代替: 'echo" $ {line ## *:} "' - https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion – melpomene

+0

鉱山に「bad substitution」というエラーがあります – acbh

0

かを指定するには-fオプションでのawkを使用することができます「:」フィールドセパレータとして。

は、現在のレコードのフィールドの数を指し、NFを使用し、最後の1つを出力することができるので、$ NFを印刷すると、最後の後のすべてのものを印刷手段に「:」。

あなたのコマンドは次のようになります -

line="$(echo $PATH)" 
echo $line | awk -F: '{print $NF}' 

echo $PATHが含まれている出力を持つ任意のコマンドの例である ":"

あなたはawkの hereについてもっと傾くことができます。