sed에서 중괄호 "]"를 벗어날 수 없는 이유는 무엇입니까?

sed에서 중괄호 "]"를 벗어날 수 없는 이유는 무엇입니까?

질문: 왜 "]"를 벗어날 수 없나요?

$ printf "*#$@~\!&*()[]\n"
*#~\!&*()[]
$ printf "*#$@~\!&*()[]\n" | sed 's/[*#$@~!&*()\[\]]//g'
*#~\!&*()
$

답변1

내부에서 [...]백슬래시는 특별한 것이 아닙니다. [\[]백슬래시와 [1 을 일치시킵니다 .

]해당 문자를 세트에 포함 하려면 해당 문자가 첫 번째인지 확인해야 합니다. []X]일치 ]하거나 Xwhile이 [X]]일치하고 X그 다음에 ](그리고 [X\]]일치하거나 X뒤에 \옵니다 ]). 이를 제외하려면 :, ^또는를 제외한 [^]X]모든 문자 뒤에 와야 합니다 .]X

따라서 귀하의 예에서는 다음과 같습니다.

sed 's/[]*\#$@~!&*()[]//g'

1sed GNU에는 POSIX 적합성 모드가 활성화되지 않은 경우( $POSIXLY_CORRECT또는 를 통해) 몇 가지 예외가 있습니다. --posix따라서 해당 구현과의 호환성을 위해 실제로 세트에 백슬래시를 포함해야 하는 경우 로 작성하는 것이 가장 좋습니다 [\\].

관련 정보