대상: ![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
( -E
BSD 확장으로 이제 sed
GNU 및 일부 다른 구현에서도 지원되며 -r
이전 버전의 GNU에서 사용됩니다 sed
.)