grep 与正则表达式错误地选择 unicode 字符

Mik*_*iko 4 regex unix unicode grep

我使用以下正则表达式运行 grep:

\n

grep -e "^[a-zA-Z]" file.txt

\n

重点是只获取以 ascii 范围内的字母字符开头的行,如果我明确地输入字母表,那么这是有效的

\n

grep -e "^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]" file.txt

\n

这已经很奇怪了,因为这就是[a-zA-Z]应该指定的内容。当我查看输入数据与第一个正则表达式的匹配时,我们得到如下匹配:

\n

\xef\xac\x81\n \xef\xac\x82\n

\n

请注意,在这些情况下 fi 和 fl 是一个字符。

\n

从技术上讲,显式输入字母表是一种解决方案,但我宁愿

\n
    \n
  • 知道为什么[a-zA-Z]不起作用
  • \n
  • 如果存在合理的解决方案,看看会是什么样子。
  • \n
\n

kni*_*ttl 5

grep 是区域设置感知的。[a-zA-Z]可以根据您的区域设置匹配非 ASCII 字符(例如 \xc3\xa1、\xc3\xa4、\xc3\xb8、\xc3\xa6)。要强制使用 ASCII(并且不处理任何多字节字符),请设置 C 语言环境:

\n
LC_ALL=C grep -e '^[a-zA-Z]' file.txt\n
Run Code Online (Sandbox Code Playgroud)\n