2016-09-23 5 views

答えて

1

単一のラインでそれを行うために迅速かつ汚い方法はgrepを使用することです:

read -r var1 var2 < <(grep -o '[0-9]*' file.txt) 

外部プログラムを使用して(それゆえ高速である)しないより堅牢な方法$BASH_REMATCHを使用することです。

if [[ "$(<file.txt)" =~ ^\((.*),(.*)\)$ ]]; then 
    var1="${BASH_REMATCH[1]}" 
    var2="${BASH_REMATCH[2]}" 
fi 

この方法では基本的な考え方は、我々は("$(<file.txt)"で)文字列にファイルの内容を読み、私たちはすぐに(=~オペレータとの)正規表現に対して、その文字列をテストすることです。正規表現には2つのキャプチャグループが含まれ、後で$BASH_REMATCH配列から取得します。正規表現は、文字列の先頭と末尾にある()を無視してグループを抽出し、それらを区切る,を見つけます。

+0

'read -r line

+0

@gniourf_gniourfそのアプローチの利点は何ですか?あなたは一行を読むことができますか? – redneb

+1

もう一つのすばらしい方法は、 'IFS = '(、)' -r _ var1 var2

関連する問題