egrep을 사용하여 문자열을 검색하는 방법

egrep을 사용하여 문자열을 검색하는 방법

[RT]"anything"D가 있는 문자열을 검색하고 싶습니다. 즉, 첫 번째 문자는 R 또는 T가 될 수 있고 다음 문자는 D가 나타날 때까지 어떤 문자라도 될 수 있다는 의미입니다. "egrep"을 사용해야 합니까?

답변1

GNU grep 및 PCRE(Perl-Compatible Regular Expressions) 지원이 있는 경우(활성화하여 -P) 다음을 수행할 수 있습니다.

grep -o -P 'RT.*?D' file

우리는 PCRE를 원합니다.게으른 수량자( ) 단독으로 사용 하는 대신 ?함께 사용할 수 있습니다 . 후자는 탐욕스럽고 모든 것을 삼킬 것입니다..*.*마지막 D...

$ grep -o 'RT.*D' <<< "JKIRTTHIUCDELKJUCDE"
RTTHIUCDELKJUCD
$ grep -o -P 'RT.*?D' <<< "JKIABTHIUCDELKJUCDE"
RTTHIUCD

아, 그리고 이 -o플래그는 grep전체 행을 인쇄하는 기본 동작 대신 행의 일치하는 부분만 인쇄하도록 지시합니다.

D참고: 이것은 한 가지 중요한 차이점이 있는 유사하지만 이제 닫힌 중복 질문에서 병합되었습니다. 여기서 패턴의 마지막 부분은 단일 문자가 아닌 다중 문자입니다 . 단일 문자의 경우 PCRE 없이 처리할 수 있지만(여기에서 다른 답변 참조) 다중 문자의 경우에는 BRE 또는 ERE 구문에서 사용할 수 없는 기능이 필요합니다.

답변2

댓글에서 알 수 있듯이. grep일을 끝내기에 충분합니다. 스키마를 [RT].*D.

처음으로 살펴보려면 D를 사용하세요 [RT][^D]*D.

질문의 "첫 번째 문자"로 인해 캐럿을 추가했습니다. 이 문구가 다른 의미를 가질 수 있다는 것을 깨닫고 이제 캐럿을 제거했습니다.

관련 정보