간단한 grep 표현

간단한 grep 표현

예상대로 작동하지 않는 grep 표현식이 있는데 그 이유를 이해할 수 없습니다.

첫 번째 표현식은 동일한 문자로 시작하고 끝나는 줄을 찾습니다. 제가 사용하는 표현인데..

grep -E '(.).*\1$' input

두 번째 표현은 두 번째와 끝에서 두 번째 문자가 동일한 줄을 찾는다는 점에서 매우 유사합니다.

grep -E '(.)(.).*\2.$' input

마지막 표현은 한 단어만 포함하고 구두점으로 끝나는 줄을 찾는 것입니다...

grep -E '(\w){1}.*[[:punct:]]$' input

왜 이것이 작동하지 않는지 이해할 수 없습니다. 제가 뭔가 크게 잘못하고 있는 걸까요, 아니면 단순한 실수인가요?

답변1

너 줄을 벗어났어(탈자 부호). 다음은 전체 줄만 일치하도록 수정된 명령입니다(하위 문자열은 일치하지 않음).

grep -E '^(.).*\1$' input

grep -E '^(.)(.).*\2.$' input

grep -E '^(\w){1}.*[[:punct:]]$' input

두 번째 및 세 번째 명령을 수정할 수도 있습니다.

두 번째 명령에는 두 개가 필요하지 않습니다.캡처 그룹. 다음 중 하나로 이 작업을 수행할 수 있습니다.

grep -E '^.(.).*\1.$' input

세 번째 명령은 올바르지 않습니다. 여러 단어가 포함된 문자열과 일치합니다. 수정된 버전은 다음과 같습니다.

grep -E '^\w+[[:punct:]]$' input

관련 정보