Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash LC_ALL=C对加速grep的影响_Bash_Shell_Grep - Fatal编程技术网

Bash LC_ALL=C对加速grep的影响

Bash LC_ALL=C对加速grep的影响,bash,shell,grep,Bash,Shell,Grep,我刚刚发现,如果我在grep命令前面加上LC_ALL=C前缀,它会大大加快grep的速度 但我想知道其中的含义 使用UTF-8的模式是否不匹配? 如果grepped文件使用UTF-8会发生什么情况?您不一定需要UTF-8在这里遇到问题。区域设置负责设置字符类,即确定哪个字符是空格、字母或数字。考虑这两个例子: $ echo -e '\xe4' | LC_ALL=en_US.iso88591 grep '[[:alnum:]]' || echo false ä $ echo -e '\xe4' |

我刚刚发现,如果我在grep命令前面加上LC_ALL=C前缀,它会大大加快grep的速度

但我想知道其中的含义

使用UTF-8的模式是否不匹配?
如果grepped文件使用UTF-8会发生什么情况?

您不一定需要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的任何子集和不使用备用二进制表示的单个字符都应该可以正常工作。

因此,如果我读对了:grep文件和模式列表只包含ASCII字符,一切都应该正常?是的,您可以使用纯ASCII。至少在实践中,理论上可能是EBCDIC。什么是
| |
?某种if语句?如果我正确理解了这个答案,这是否意味着使用
LC_ALL=C
永远不会有危险,而且应该比其他语言环境更可取?什么版本的grep?在2.7.1或2.7.3之前的某个地方有一个讨厌的UTF错误。我假设它的GNU grep,BSD grep总是很慢。