grep 2.27을 사용하여 하이픈을 일치시키려고 할 때 이상한 동작이 발생합니다.

grep 2.27을 사용하여 하이픈을 일치시키려고 할 때 이상한 동작이 발생합니다.

다음 문자열이 있습니다.

-----BEGIN 1_1 CERTIFICATE-----

다음 시퀀스는 하이픈과 일치하지 않습니다.

grep -- "[A-Z\-\_]" file

\_하이픈을 제거하면 다음과 일치합니다.

grep -- "[A-Z\-]" file

백슬래시를 제거하면 가 됩니다 grep: Invalid range end. 또한 -E/egrep사용 여부에 관계없이 동일한 결과를 얻습니다.

이 행동의 이유는 무엇입니까?

답변1

하이픈을 와 일치시킬 때 [...]하이픈은 첫 번째 또는 마지막 하이픈이어야 합니다.

grep '[A-Z_-]' ...

하이픈이 다른 곳에 있으면 범위를 지정하는 것으로 간주됩니다.

또한 는 \리터럴이므로 [...](전체 표현식이 셸에서 인용된 경우) [\-]백슬래시나 하이픈 및 [\-_]가능하면 \, ], 또는( ^ASCII 테이블에서 에서 까지 _범위의 문자임 )과 일치합니다.\_

관련 정보