정규식을 사용하여 문자가 n번 반복되는 줄을 일치시킵니다.

정규식을 사용하여 문자가 n번 반복되는 줄을 일치시킵니다.

문자열과 정확히 일치하는 grep 정규식을 찾고 있습니다.₩₩줄에.
데이터 파일의 예는 다음과 같습니다.

₩₩                     
q rr a                 
  알파벳₩₩
라라라라아아아₩₩QQ   
케데르하르트₩₩₩₩자자

예상 결과는 다음과 같습니다.

rr
  abcrr d
rarrrrrr aaa rrqq
kdhdrraa rrzaza

어떤 제안이 있으십니까?

답변1

표준 grep구문과 BRE를 사용하세요.

$ grep -x '\(.*[^r]\)\{0,1\}rr\([^r].*\)\{0,1\}' < 파일
₩₩
ABCD
rarrrrrr아아아아아아아아아아아
케드라 자자

( 42 rr초로 대체 )r\{42\}r

그게 e와 일치하는 거야엑스actly(즉, 전체 라인)는 rr선택적으로( \{0,1\}0 또는 1, ERE 와 동일) 앞에 ?( ) 이외의 문자로 끝나는 문자 시퀀스가 ​​오고 선택적으로 other 문자로 시작하는 문자 시퀀스가 ​​옵니다. 보다 ( ).r[^r]r

ERE를 사용하세요:

$ grep -E '(^|[^r])rr([^r]|$)' < 파일
₩₩
abcrr
라라라라아아아QUR
케데데이라rz아자

( 42 rr초로 대체 )r{42}r

그 앞에는 rr줄의 시작 부분이거나 그렇지 않은 문자가 있고 r, 그 뒤에는 줄의 끝이거나 그렇지 않은 문자가 옵니다 r.

PCRE 사용(비표준):

$ grep -P '(?<!r)rr(?!r)' < 파일
₩₩
알파벳₩₩
라라라라아아아₩₩QQ
케데르하르트₩₩₩₩자자

( 42 rr초로 대체 )r{42}r

그건,rr 아니요이전 또는 이후 중 하나입니다 r.

그리고향상된RE(즉시 개방 grep):

$ grep -xX '(.*r)!rr(r.*)!'
₩₩
ABCD
rarrrrrr아아아아아아아아아아아
케드라 자자

( 42 rr초로 대체 )r{42}r

관련 정보