그래서 시간이 오래 걸렸지만 드디어 알게 됐어요생각하다정규 표현식에 관한 한 kwrite
.
하지만 나는 아직도 그 지식을 어떻게 번역해야 할지 모르겠습니다 grep
. 내가 무엇을 하고 있는지 알면 내 것이 마음에 들지만 grep
매뉴얼은 항상 나에게 두통을 안겨줍니다.
다음 줄과 같은 내용을 일치시키고 싶습니다.
줄바꿈 뒤의 대문자. CAPI TALSFOLL 빚진 새로운 라인.
즉, 두 개 이상의 대문자로 시작하는 줄입니다. 하지만 어떻게 해야할지 모르겠습니다.
에서는 kwrite
다음을 사용하여 다음 줄을 일치시킵니다.
\n[A-Z][A-Z]+
하지만 grep
...글쎄. 나는 다음과 같은 느낌을 가지고 있습니다.
me@ROOROO:~/$ grep "^[A-Z]something" filename
하지만
me@ROOROO:~/$ grep "^[A-Z][A-Z]+" filename
효과가 없습니다(빈 파일을 반환함). 인터넷 검색에서 "grep은 하나 이상의 용어와 일치합니다"라고 믿게 만듭니다.
me@ROOROO:~/$ grep "^[A-Z][A-Z]*" filename
올바른 구문입니다. 그러나 아쉽게도 그것은 문제를 해결하지 못합니다.
답변1
첫 번째 예에서는 올바른 구문을 사용했습니다. 문제는 +
"확장된" 정규식을 사용할 때만 특수한 것으로 간주된다는 것입니다. GNU 구현 매뉴얼 페이지에서 grep
:
기본 정규식과 확장 정규식
기본 정규 표현식에서 메타 문자 ?, +, {, |, (및)는 백슬래시 버전 \?, \+, \{, \|, \( 및 \ ) 대신 특별한 의미를 잃습니다.
( \?
, \+
및 \|
는 비표준 GNU 확장입니다).
따라서 이스케이프해야 합니다 +
(GNU grep
또는 호환 가능하다고 가정).
$ grep "^[A-Z][A-Z]\+" filename
\{1,\}
표준 GNU에 해당하는 것을 사용하십시오 \+
.
$ grep '^[A-Z][A-Z]\{1,\}' filename
여기에서도:
$ grep '^[A-Z]\{2,\}' filename
grep
또는 플래그를 전달하거나 실행하여 -E
확장 정규식을 활성화합니다 egrep
( egrep
70년대 후반에 이러한 확장 정규식을 도입한 명령).
$ grep -E "^[A-Z][A-Z]+" filename
$ egrep "^[A-Z][A-Z]+" filename
어쨌든 이들 모두는 기능적으로 다음과 동일합니다.
$ grep '^[A-Z][A-Z]' filename
+
따라서 운영자 도 필요하지 않습니다 .
다른 예에서는 다음을 시도했습니다.
$ grep "^[A-Z][A-Z]*" filename
*
기본 정규식에 대해 작동하지만 1회 이상이 아닌 0회 이상 일치합니다. 해결책은 다음과 같습니다.너의 답"하나의 대문자, 다른 대문자, 0 개 이상의 대문자와 일치합니다"라고 표시되어 있기 때문에 작동합니다. 질문의 방법은 "하나의 대문자를 일치시킨 다음 하나 이상의 대문자를 일치시키십시오"라고 말합니다. 이는 동일합니다. 를 사용하여 {min,max}
원하는 정확한 숫자를 지정할 수도 있습니다 . 생략하는 경우 max
어떤 숫자라도 허용됩니다(이 경우에도 정규식 확장이 필요함).
$ egrep "^[A-Z]{2,}"
(역사상 egrep
처음에는 지원이 지원되지 않았습니다(예: {min,max}
Solaris 11에서는 여전히 지원되지 않습니다). 지원이 추가되기 전에 추가되었습니다(이 경우 실제로 하위 호환성이 깨졌습니다)./bin/egrep
\{min,max\}
grep
{min,max}
egrep
egrep
답변2
[AZ]만 추가하면 됩니다. 그래서 그렇습니다
me@ROOROO:~/$ grep "^[A-Z][A-Z][A-Z]*" filename
답변3
의 정규식 지원이 필요한 것 같습니다 perl
. 형태 man grep
:
-P, --perl-regexp
Interpret PATTERN as a Perl regular expression. This is highly experimental
and grep -P may warn of unimplemented features.
그래서 grep -P "^[A-Z][A-Z]+"
더 도움이 될 수도 있습니다.