我刚刚发现,如果我用一个LC_ALL = C我的grep命令前缀,它会奇怪加速grep。
但我想知道这个含义。
使用UTF-8的模式是否不匹配?
如果grepped文件使用UTF-8,会发生什么?
您不一定需要UTF-8在这里遇到麻烦。语言环境负责设置字符类,即确定哪个字符是空格,字母或数字。考虑这两个例子:
原文链接:https://www.f2er.com/bash/387590.html$ 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和单个字符的匹配,而不用二进制表示代替,无论区域设置如何,都应该能正常工作。