私はこのような文字列を持っています
string="xxxxx.yyyyy[2].zzzzz"
の間の数字を抽出したい[ ]
。次のawk
コマンドを使用しました
echo $string | awk -F'[]' '{print $2}'
しかし、このawk
コマンドはエラーを返します:
awk: bad regex '[]': Unmatched [ or [^
それを修正する方法は?
sedを使用:
echo "xxxxx.yyyyy[2].zzzzz" | sed -r 's/.*\[(.*)\].*/\1/g'
awk を使用:
echo "xxxxx.yyyyy[2].zzzzz" | awk 'BEGIN {FS="[";RS="]"} {print $2}'
これは、より一般的なアプローチです。テキストファイルから任意の数値を取得します。
echo "xxxxx.yyyyy[2].zzzzz" | awk -F "[^0-9]*" '{for (i=2;i<=NF;i++) printf "%s%s",$i,(i==NF?RS:" ")}'
2
その他の例
cat file
"C 56","Home athletics center","LAC"
"D001","50M Run","50M"
"D003","10.505M Run","100M","42K"
awk -F "[^0-9.]*" '{for (i=2;i<=NF;i++) printf "%s%s",$i,(i==NF?RS:" ")}' file
56
001 50 50
003 10.505 100 42
とgrep
echo "xxxxx.yyyyy[2].zzzzz" | grep -oE '[0-9]'
2