sed의 문자 집합과 일치시키려고 하는데 어떤 이유로 [
마음에 들지 않습니다.]
]
$ echo 'foo [bar]' | sed -E 's/[\[\]]//g'
foo [bar]
다음은 작동합니다:
$ echo 'foo [bar]' | sed -E 's/\]//g'
foo [bar
$ echo 'foo [bar]' | sed -E 's/[\[]//g'
foo bar]
그러나 어떤 이유로 ]
이 문자 집합의 내부가 이를 깨뜨립니다.
$ echo 'foo [bar]' | sed -E 's/[\]]//g'
foo [bar]
이상하게도 이것은 심지어 작동합니다:
$ echo 'foo [bar]' | sed -E 's/[]]//g'
foo [bar
$ echo 'foo [bar]' | sed -E 's/[[]//g'
foo bar]
하지만 이건 아니다:
$ echo 'foo [bar]' | sed -E 's/[[]]//g'
foo [bar]
일종의 추가 탈출이 필요합니까, 아니면 이것이 가능합니까?
답변1
]
대괄호 표현식 내의 or는 [
이스케이프할 필요가 없습니다. 대괄호 표현식의 백슬래시는 이스케이프된 의미를 상실하지만 리터럴 백슬래시 문자와 일치합니다. 따라서 이 작업을 수행하면 첫 번째 부분과 두 번째 부분 의 두 문자를 일치시키 [\]]
라고 지시 하지만 입력의 문자열이 일치하지 않으므로 아무 것도 변경되지 않습니다. 문자를 일치시키려면 대괄호 표현식에 사용하려는 경우에만 필요하며 , 그렇지 않은 경우 리터럴을 사용할 수도 있습니다.sed
\
[\]
]
\]
]
[]]
]
또한 대괄호 표현식에서는 [...]
해당 문자가 ]
첫 번째 문자여야 하므로 's/[[]]//g'
이렇게 해야 합니다 's/[][]//g'
.