질문: 왜 "]"를 벗어날 수 없나요?
$ printf "*#$@~\!&*()[]\n"
*#~\!&*()[]
$ printf "*#$@~\!&*()[]\n" | sed 's/[*#$@~!&*()\[\]]//g'
*#~\!&*()
$
답변1
내부에서 [...]
백슬래시는 특별한 것이 아닙니다. [\[]
백슬래시와 [
1 을 일치시킵니다 .
]
해당 문자를 세트에 포함 하려면 해당 문자가 첫 번째인지 확인해야 합니다. []X]
일치 ]
하거나 X
while이 [X]]
일치하고 X
그 다음에 ]
(그리고 [X\]]
일치하거나 X
뒤에 \
옵니다 ]
). 이를 제외하려면 :, ^
또는를 제외한 [^]X]
모든 문자 뒤에 와야 합니다 .]
X
따라서 귀하의 예에서는 다음과 같습니다.
sed 's/[]*\#$@~!&*()[]//g'
1sed
GNU에는 POSIX 적합성 모드가 활성화되지 않은 경우( $POSIXLY_CORRECT
또는 를 통해) 몇 가지 예외가 있습니다. --posix
따라서 해당 구현과의 호환성을 위해 실제로 세트에 백슬래시를 포함해야 하는 경우 로 작성하는 것이 가장 좋습니다 [\\]
.