我刚刚发现,如果我使用LC_ALL = C为我的grep命令添加前缀,那么加速grep up会产生奇迹。
但我想知道其影响。
使用UTF-8的模式不匹配吗? 如果grepped文件使用UTF-8会发生什么?
答案 0 :(得分:18)
你不一定需要UTF-8在这里遇到麻烦。区域设置负责设置字符类,即确定哪个字符是空格,字母或数字。考虑以下两个例子:
$ echo -e '\xe4' | LC_ALL=en_US.iso88591 grep '[[:alnum:]]' || echo false
ä
$ echo -e '\xe4' | LC_ALL=C grep '[[:alnum:]]' || echo false
false
当尝试将精确的二进制模式相互匹配时,语言环境没有区别,但是:
$ echo -e '\xe4' | LC_ALL=en_US.iso88591 grep "$(echo -e '\xe4')" || echo false
ä
$ echo -e '\xe4' | LC_ALL=C grep "$(echo -e '\xe4')" || echo false
ä
我不确定grep实现unicode的程度,以及不同代码点之间的匹配程度,但匹配ASCII的任何子集以及没有备用二进制表示的单个字符的匹配应该可以正常工作,无论语言环境如何。