bash – LC_ALL = C加速grep的含义

前端之家收集整理的这篇文章主要介绍了bash – LC_ALL = C加速grep的含义前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚发现,如果我用一个LC_ALL = C我的grep命令前缀,它会奇怪加速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和单个字符的匹配,而不用二进制表示代替,无论区域设置如何,都应该能正常工作。

原文链接:https://www.f2er.com/bash/387590.html

猜你在找的Bash相关文章