패턴 내의 grep 이중 괄호

패턴 내의 grep 이중 괄호
grep "^[[:space:]]*clientPort[^[:alpha:]]" zoo.cfg

이는 구성 파일에서 포트 번호가 포함된 줄을 추출하는 데 사용되는 grep 패턴입니다.

1) 일반적으로 정규식에서는 대괄호를 사용하여 묶인 문자 하나와 일치시킵니다. 나는 그것을 여기에서 보았다 :alpha:. [a-zA-Z]와 같은가요?

2) 정규식에 이중 괄호가 있는 이유는 무엇입니까?

3) [^[:alpha:]]대괄호 안의 캐럿 기호는 무엇을 의미하나요?

구성 파일에는 다음 줄이 포함되어 있습니다.

clientPort=2181

답변1

정규식당신이 사용할 수 있습니다대괄호 표현구성된 요소의 컬렉션을 나타냅니다. 의 구문은 데이터 정렬 요소, 데이터 정렬 기호, 등가 클래스, 문자 클래스 또는 범위 표현식을 그 안에 배치할 수 Bracket Expression있다는 것입니다 .[...]...

와 사이에 위치 클래스 이름으로 구성된 alpha문자 클래스 이름을 사용하고 있습니다 . 따라서 그 사이에 문자 클래스 표현식을 사용하고 있는 것입니다 .[::][:alpha:]Bracket Expression [[:alpha:]]

[a-zA-Z]일부 로케일에서는 문자 클래스 표현식이 범위 표현식과 다릅니다.이것이 가장 좋은 예이다너는 볼 수있어:

$ LC_ALL=en_US.utf8 bash -c 'case b in [A-Z]) echo yes; esac'
yes

문자 클래스를 사용해도 아무 것도 제공되지 않습니다.

$ LC_ALL=en_US.utf8 bash -c 'case b in [[:upper:]]) echo yes; esac'

캐럿이 의 ^시작 부분에 있는 경우 Bracket Expression표현식의 일치를 무효화합니다 . 문자 클래스에 속하지 않는 모든 문자 [^[:alpha:]]와 일치합니다 .[:alpha:]

$ case 1 in [^[:alpha:]]) echo yes;; esac       
yes

관련 정보