이 패턴과 일치해야 1001-N-N하며 다른 것은 무시해야 합니다.

이 패턴과 일치해야 1001-N-N하며 다른 것은 무시해야 합니다.

내 호스트 이름은 다음과 같습니다

www-foo-1001-1-1.example.com

다음 문자열 일치를 사용하여 애플리케이션을 배포해야 하는 스크립트를 작성 중입니다.1001-<any digit>-<any digit>

예: 스크립트는 다음 호스트 이름과 일치해야 합니다.

www-foo-1001-1-49
www-foo-1001-4-37
www-foo-1001-2-12
www-foo-1001-8-4

호스트 이름에서 이 패턴을 무시하십시오.

www-foo-1001-1-2-49
www-foo-1001-1-1-49
www-foo-1001-1
www-foo-1001

이 패턴과 일치해야 1001-N-N하며 다른 것은 무시해야 합니다.

실행에 대한 자세한 내용을 원하고 정규화된 호스트 이름과 일치하지 않는 오류를 발생시키는 상태 코드를 if then..반환하고 싶습니다 .exit$?

답변1

세게 때리다확장 모드내에서 활성화되므로 [[ ... ]]다음을 수행할 수 있습니다.

hosts=( www-foo-1001-1-49 www-foo-1001-4-37 www-foo-1001-2-12 www-foo-1001-8-4 www-foo-1001-1-2-49 www-foo-1001-1-1-49 www-foo-1001-1 www-foo-1001 )
pattern='*-1001-+([[:digit:]])-+([[:digit:]])'
for h in "${hosts[@]}"; do
    if [[ $h == $pattern ]]; then
        echo "OK: $h"
    else
        echo "no: $h"
    fi
done
OK: www-foo-1001-1-49
OK: www-foo-1001-4-37
OK: www-foo-1001-2-12
OK: www-foo-1001-8-4
no: www-foo-1001-1-2-49
no: www-foo-1001-1-1-49
no: www-foo-1001-1
no: www-foo-1001

내 패턴은 *-1001-당신이 일치하고 싶지 않다고 가정하는 곳에서 시작됩니다 11001.21001

==in의 연산자는 [[ ... ]]패턴 일치 연산자입니다.

오른쪽 피연산자는 패턴 변수이지만인용되지 않음. 이를 통해 변수의 값을 다음과 같이 해석할 수 있습니다.무늬하나도 아니야.

답변2

배시 사용:

$ touch www-foo-1001  www-foo-1001-1  www-foo-1001-1-1-49  www-foo-1001-1-2-49  www-foo-1001-1-49  www-foo-1001-2-12  www-foo-1001-4-37  www-foo-1001-8-4
$ for f in *
do
  [[ $f =~ 1001-[[:digit:]]+-[[:digit:]]+$ ]] && printf 'Yes: %s\n' "$f"
done
Yes: www-foo-1001-1-49
Yes: www-foo-1001-2-12
Yes: www-foo-1001-4-37
Yes: www-foo-1001-8-4

이는 bash의 정규식 조건부 연산자를 사용하여 인수를 테스트합니다.

  • 포함하다1001-
  • 그 뒤에 몇 개의 숫자가 따라온다
  • 그 다음에-
  • 그 뒤에 몇 개의 숫자가 따라온다
  • 다음은 아무것도 따르지 않습니다.$

답변3

kapu@ppc:$ ls
www-foo-1001        www-foo-1001-1-1-49 www-foo-1001-1-49   www-foo-1001-4-37
www-foo-1001-1      www-foo-1001-1-2-49 www-foo-1001-2-12   www-foo-1001-8-4
kapu@ppc:$ ls | awk '/www-foo-1001-[0-9]+-[0-9]+$/{print}'
www-foo-1001-1-49
www-foo-1001-2-12
www-foo-1001-4-37
www-foo-1001-8-4

관련 정보