grep은 kwrite 정규식 [AZ][AZ]+와 동일합니다.

grep은 kwrite 정규식 [AZ][AZ]+와 동일합니다.

그래서 시간이 오래 걸렸지만 드디어 알게 됐어요생각하다정규 표현식에 관한 한 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( egrep70년대 후반에 이러한 확장 정규식을 도입한 명령).

$ 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}egrepegrep

답변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]+"더 도움이 될 수도 있습니다.

관련 정보