Unix의 확장 정규식은 호환됩니까?

Unix의 확장 정규식은 호환됩니까?

Unix 도구 정규식은 완벽하게 호환됩니까?

예를 들어, 내가 grep -oE "\$text *\( *([^)]) *\)"사용하는 경우, 내가 받은 정확한 부품의 교체가 보장됩니까 sed -E "s/\$text *\( *([^)]) *\)/replacement/g"? 이것이 모든 정규 표현식으로 확장됩니까?

얼마나 잘 일치합니까(또는 일치하지 않습니까)?

그런데, 내 친구 sed는 스위치를 표시하지 않지만 -E여전히 작동하며 정규식 스위치가 -r. -E그리고 -r 같은거야?

답변1

GNU grep 및 GNU sed 매뉴얼에는 -E확장 정규식 사용에 대한 옵션이 모두 언급되어 있습니다.

grep:

-E --extended-regexp
패턴을 확장 정규식(ERE)으로 해석합니다. (-E는 POSIX에 의해 지정됩니다.)

sed:

-E -r --regexp-extended
기본 정규식 대신 확장 정규식을 사용하세요.

-E( 이전에 지원되었지만 문서화되지 않은 것으로 언급되어 있습니다 .)

둘 다 지원하는 정규식의 정확한 정의를 확인할 수 있지만 귀하의 정의는 충분히 표준적인 것처럼 보입니다. 실제로 이는 기본 정규식과 동일해 보입니다 \$text *( *[^)] *)( sed대체 항목이 캡처링 그룹을 사용하지 않는 한).

그러나 작성된 대로(큰따옴표로 묶음) 어떤 것과도 일치하지 않습니다. 백슬래시는 쉘의 달러 기호를 벗어나므로 매개변수 확장으로 처리되지 않습니다. 그러나 grep또는 for 줄의 끝으로 시작하는 정규식을 sed볼 수 있습니다 . $줄 끝 뒤에는 아무 것도 올 수 없으므로 패턴이 일치할 수 없습니다. 백슬래시를 두 개 더 추가하거나 큰따옴표 대신 작은따옴표를 사용해야 합니다.

관련 정보