정규식에 대한 Grep 구문 오류 수정

정규식에 대한 Grep 구문 오류 수정

grep으로 실행해야 하는 정규식을 만들었습니다. 온라인 정규식 도구와 함께 작동하므로 정규식은 괜찮을 것이라고 확신하지만 실행하면

grep -r -P -o -h '(?<=(?<!def )my_method )(["'])(?:(?=(\\?))\2.)*?\1'

오류가 발생했습니다 Syntax error: ")" unexpected.

답변1

정규식은 작은따옴표로 묶여 있지만포함하다아포스트로피.

작은따옴표는 ["']이스케이프해야 합니다. 그렇지 않으면 인용된 문자열의 끝을 쉘에 알립니다.

이렇게 하면 문제가 해결됩니다.

grep -r -P -o -h '(?<=(?<!def )my_method )(["'\''])(?:(?=(\\?))\2.)*?\1'
#                                            ^^^^

를 사용하면 ["'\'']첫 번째 부분은 리터럴 작은따옴표를 삽입하여 '문자열의 첫 번째 부분을 끝내고 \', 마지막 부분은 '이전 비트와 연결될 새 작은따옴표 문자열을 시작합니다. 가운데 작은따옴표만 정규식 자체에 나타나고 나머지 두 개의 작은따옴표는 셸에서 제거됩니다.

답변2

@Kusalananda로설명했다, 문제는 '정규식에 있습니다. 간단한 해결책은 "정규 표현식을 사용하는 것입니다. 인용된 문자열 내에서 이스케이프하지 않는 것과 달리 인용된 문자열 내에서도 이스케이프 "가 가능하기 때문입니다 ."''

grep -rPoh "(?<=(?<!def )my_method )([\"'])(?:(?=(\\?))\2.)*?\1"

관련 정보