sed: 이스케이프된 대괄호 불일치

sed: 이스케이프된 대괄호 불일치

대상: ![alttext](url.png)로 대체합니다 <img src="url.png" alt="alttext">.

!일부는 (...)잘 작동하지만 이 [...]부분은 제가 작동할 수 없습니다.

간단한 예로, input 과 일치시키고 싶습니다 a [test] b. 이것은 내가 사용하는 명령입니다:

echo 'a [test] b' | sed 's/\[[^\]]*\]/x/'

이것은 작동하지 않습니다. 대괄호를 꺾쇠 ​​괄호로 바꾸면 정상적으로 작동합니다.

echo 'a <test> b' | sed 's/<[^>]*>/x/'

sed가 동일한 정규식을 이해하지 못하지만 이스케이프된 대괄호를 사용하는 이유는 무엇입니까? Python과 같은 다른 도구에서도 잘 작동합니다.

답변1

문자 클래스 정의에서 ]가 바로 뒤에 오면 문자 그대로 실행됩니다 ^. 그러니 여기서 도망치지 마세요. 또한 +"하나 이상의 문자" 또는 *"0개 이상의 문자"를 의미하는 와 같은 수량자가 누락되었습니다 . 또한 명령줄에 너무 많은 항목이 있습니다 sed.

$ echo 'a [test] b' | sed 's/\[[^]]\+\]/x/'
a x b

( \+GNU 확장(현재 다른 구현에서도 지원됨)으로서 표준에 해당하는 것은 \{1,\})

또는 더 읽기 쉽습니다.

$ echo 'a [test] b' | sed -E 's:\[[^]]+\]:x:'
a x b

( -EBSD 확장으로 이제 sedGNU 및 일부 다른 구현에서도 지원되며 -r이전 버전의 GNU에서 사용됩니다 sed.)

관련 정보