我使用以下正则表达式运行 grep:
cat file.txt | grep -e "^[a-zA-Z]"
重点是只获取以 ascii 范围内的字母字符开头的行,如果我明确地输入字母表,那么这是有效的
cat file.txt | grep -e "^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]"
这已经很奇怪了,因为这就是
[a-zA-Z]
应该指定的内容。当我查看输入数据与第一个正则表达式的匹配时,我们得到如下匹配:
fi
fl
🅱
请注意,在这些情况下,fi 和 fl 是一个字符。
从技术上讲,显式输入字母表是一个解决方案,但我宁愿
[a-zA-Z]
不起作用grep 是区域设置感知的。
[a-zA-Z]
可以匹配非 ASCII 字符,具体取决于您的区域设置(例如 á、ä、ø、æ)。要强制使用 ASCII(并且不处理任何多字节字符),请设置 C 区域设置:
LC_ALL=C grep -e "^[a-zA-Z]" file.txt