![패턴 내의 grep 이중 괄호](https://linux55.com/image/72650/%ED%8C%A8%ED%84%B4%20%EB%82%B4%EC%9D%98%20grep%20%EC%9D%B4%EC%A4%91%20%EA%B4%84%ED%98%B8.png)
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