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
부터 뒤에 오는 모든 문자 와 일치합니다 . 네 번째 문자에는 제한이 없으며 네 번째 문자가 필요하지도 않습니다.A
Z
분명히 이것은 원하는 효과를 얻지 못합니다.
이것을 시도해 보십시오: 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
따라서 정규식은 표준 입력 및/또는 검색되는 명명된 파일뿐만 아니라 파일에서도 검색됩니다 .RHAA
RHAB
대신 인용된 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]
, 그리고 의지아니요선을 다른 곳의 해당 패턴과 일치시킵니다.