
다음 문자열이 있습니다.
-----BEGIN 1_1 CERTIFICATE-----
다음 시퀀스는 하이픈과 일치하지 않습니다.
grep -- "[A-Z\-\_]" file
\_
하이픈을 제거하면 다음과 일치합니다.
grep -- "[A-Z\-]" file
백슬래시를 제거하면 가 됩니다 grep: Invalid range end
. 또한 -E/egrep
사용 여부에 관계없이 동일한 결과를 얻습니다.
이 행동의 이유는 무엇입니까?
답변1
하이픈을 와 일치시킬 때 [...]
하이픈은 첫 번째 또는 마지막 하이픈이어야 합니다.
grep '[A-Z_-]' ...
하이픈이 다른 곳에 있으면 범위를 지정하는 것으로 간주됩니다.
또한 는 \
리터럴이므로 [...]
(전체 표현식이 셸에서 인용된 경우) [\-]
백슬래시나 하이픈 및 [\-_]
가능하면 \
, ]
, 또는( ^
ASCII 테이블에서 에서 까지 _
범위의 문자임 )과 일치합니다.\
_