Regular-Expression
為什麼大寫字母包含在 awk 正則表達式中的一系列小寫字母中?
$ echo ABC | awk '$0 ~ /^[a-b]/' ABC $ echo ABC | awk '$0 ~ /^[a-a]/' $ echo ABC | awk '$0 ~ /^a/' $
你看。
/[a-b]/
擷取A
,但/[a-a]/
或/a/
不擷取。為什麼?
我認為這是一個“語言環境”問題。
在我的語言環境 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 的手冊頁中理解序列表達式是否以區域設置排序順序擴展;似乎不是)。