Bash - 숫자 튜플과 일치하는 정규식

Bash - 숫자 튜플과 일치하는 정규식

read 명령을 통해 bash의 변수에 작성된 문자열이 두 숫자의 튜플인지 확인하고 싶습니다. 내가 아는 한, 이것은 다음과 같이 가능해야 합니다.

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

적어도 하나의 공백과 전후의 공백으로 구분된 두 숫자의 튜플에 대해 나는 시도했습니다.

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

일치해야

12 123
  23 3246543
123     345     
     34      23
1 234

하지만

123 123 123
1235124
123w123 123
etc.

그러나 이것은 작동하지 않습니다 ...

답변1

POSIX셸 스크립트 함수는 매개변수 확장을 사용하여 첫 번째와 두 번째 숫자를 가져오고, -eq둘 다 동일한 숫자인 두 개의 인수가 있는 경우에만 성공하고(인수가 더 적거나 많거나 문자가 포함된 경우 실패) !=공백을 확인합니다 . . 보고진실두 개의 숫자 튜플인 경우에만:

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

관련 정보