RH[A-ZA-Z]를 grep과 일치시킵니다.

RH[A-ZA-Z]를 grep과 일치시킵니다.

grep문자열에 RH와 두 문자(둘 다 A와 Z 사이의 문자)가 포함되도록 정규식 RH[A-ZA-Z]를 일치시키려면 어떻게 해야 합니까 ?

나는 성공하지 않고 이것을 시도했습니다.

 yum list-security --security | awk '{print $1}' | sort | uniq | grep RH[A-ZA-Z]
 Loaded
 RHEA-2014:1307
 RHSA-2014:1326
 RHBA-2014:1388
 RH@A-2014:1389
 RHSA-2014:1392
 RHSA-2014:1389
 RH7A-2014:1392
 RHSAA-2014:1389
 RHMAW-2014:1392

이것이 내가 기대하는 것입니다:

 RHEA-2014:1307
 RHSA-2014:1326
 RHBA-2014:1388
 RHSA-2014:1392
 RHSA-2014:1389

답변1

RH[A-ZA-Z]동일한 문자 집합을 두 번 반복하는 단일 문자 클래스를 포함하는 정규식입니다. from RH부터 뒤에 오는 모든 문자 와 일치합니다 . 네 번째 문자에는 제한이 없으며 네 번째 문자가 필요하지도 않습니다.AZ

분명히 이것은 원하는 효과를 얻지 못합니다.

이것을 시도해 보십시오: RH[A-Z][A-Z]또는 (확장 grep -E또는 Perl grep -P정규식 사용)RH[A-Z]{2}

또한 셸이 전역 변수로 확장하지 않도록 정규식 주위에 작은따옴표(또는 변수나 명령 대체를 포함해야 하는 경우 큰따옴표)를 넣는 것이 좋습니다. 현재 디렉토리 이름에 파일이 있으면 RHAA쉘은 인수를 RHAA로 확장합니다.모두당신은 grep볼 수 있습니다 :

$ grep RH[A-Z][A-Z] yael.txt  | wc -l
7
$ touch RHAA
$ grep RH[A-Z][A-Z] yael.txt  | wc -l
0

다음과 동일:

$ grep RHAA yael.txt  | wc -l
0

그러나 상황은 더욱 악화되었습니다. "RHAB"라는 파일도 있는 경우 grep명령줄은 다음으로 확장됩니다.

grep RHAA RHAB yael.txt

grep따라서 정규식은 표준 입력 및/또는 검색되는 명명된 파일뿐만 아니라 파일에서도 검색됩니다 .RHAARHAB

대신 인용된 grep을 사용하세요.grep 'RH[A-Z][A-Z]'


고쳐 쓰다:

뒤에 문자 두 개만(단, 두 개 이하) RH따르 려면 다음을 대신 사용하세요.[A-Z]

grep 'RH[A-Z][A-Z][^A-Z]' yael.txt

세 번째 문자 클래스는 클래스를 부정하거나 반전시키는 [^A-Z]로 시작합니다 . ^즉, 어떤 문자와도 일치합니다.와는 별개로 A도착하다 Z.


어떤 버전의 정규 표현식을 사용하든 일치 항목을 줄의 시작 부분에 고정하고 싶을 것입니다. 당신 ^도 사용할 수 있지만 밖에서는 완전히 다른 의미를 갖습니다 []. 이것이 시작 앵커 포인트입니다. 예를 들면 다음과 같습니다.

grep '^RH[A-Z][A-Z][^A-Z]' yael.txt

행만 일치합니다시작RH[A-Z][A-Z][^A-Z], 그리고 의지아니요선을 다른 곳의 해당 패턴과 일치시킵니다.

관련 정보