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

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

readコマンドでbash変数に書かれた文字列が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番目の数字を取得し、両方の引数が-eq同じ数字である場合にのみ成功し(引数が少ない、より多い、またはその両方に文字が含まれている場合は失敗します)、スペースを確認しますシェルスクリプト関数です!=。商品を返す本物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

おすすめ記事