$ echo ABC | awk '$0 ~ /^[a-b]/'
ABC
$ echo ABC | awk '$0 ~ /^[a-a]/'
$ echo ABC | awk '$0 ~ /^a/'
$
바라보다. /[a-b]/
캡처 A
하지만 캡처하지 않을 /[a-a]/
수도 있습니다 /a/
. 왜?
답변1
나는 이것이 "로케일" 문제라고 생각합니다.
내 로케일 it_IT에서 다음 코드 조각
if [[ a < A ]]; then
echo "a < A"
elif [[ a > A ]]; then
echo "a > A"
else
echo "a = A"
fi
if [[ b < A ]]; then
echo "b < A"
elif [[ b > A ]]; then
echo "b > A"
else
echo "b = A"
fi
프로그램
a < A
b > A
A
그래서 (놀랍게도) a
와 사이에 있으므로 b
범위 내에 있습니다.
실행을 시도하다
echo ABC | LC_COLLATE=C awk '$0 ~ /^[a-b]/'
편집하다
다음 명령은 해당 로케일의 조합 순서를 표시합니다.
echo $(LC_COLLATE=C printf '%s\n' {A..z} | sort)
내 컴퓨터의 출력은 다음과 같습니다.
` ^ _ [ ] a A b B c C d D e E f F g G h H i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y z Z
(bash의 매뉴얼 페이지에서 이해할 수 없습니다서열 표현로캘 조합 순서로 확장할지 여부는 그렇지 않은 것 같습니다.