Bash - 数字のタプルに一致する正規表現

Bash - 数字のタプルに一致する正規表現

bashのreadコマンドで変数に書き込まれた文字列が2つの数値のタプルであるかどうかを確認したい。私の知る限り、これは次のようにして可能になるはずだ。

if [[ "$input" =~ "$regex" ]]; then ...

少なくとも1つの空白と前後に任意の数の空白で区切られた2つの数値のタプルの場合、私は試しました

$regex="^ *[0-9]+ +[0-9]+ *$"

一致するはず

12 123
  23 3246543
123     345     
     34      23
1 234

だがしかし

123 123 123
1235124
123w123 123
etc.

しかし、これは機能しません...

答え1

POSIXシェル スクリプト関数は、パラメータ展開を使用して最初の数値と 2 番目の数値を取得し、-eq2 つの引数が同じ数値である場合にのみ成功します (引数の数が少ないか多いか、または文字が含まれている場合は失敗します)。また、!=スペースをチェックします。戻り値真実2 つの数値のタプルの場合のみ:

is_tup() { [ ${1% *} -eq ${1% *} -a \ 
             ${1#* } -eq ${1#* } -a "${1% *}" != "$1" ] 2> /dev/null ; }

テスト:

echo '12 123
  23 3246543
123     345     
     34      23
1 234
123 123 123
1235124
123w123 123' | 
while read x ; do is_tup "$x" && a=yes || a=no ; printf '%s\t%s\n' $a "$x" ; done

出力:

yes 12 123
yes 23 3246543
yes 123     345
yes 34      23
yes 1 234
no  123 123 123
no  1235124
no  123w123 123

関連情報