加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – LC_ALL = C加速grep的含义

发布时间:2020-12-15 19:11:18 所属栏目:安全 来源:网络整理
导读:我刚刚发现,如果我用一个LC_ALL = C我的grep命令前缀,它会奇怪加速grep。 但我想知道这个含义。 使用UTF-8的模式是否不匹配? 如果grepped文件使用UTF-8,会发生什么? 您不一定需要UTF-8在这里遇到麻烦。语言环境负责设置字符类,即确定哪个字符是空格,
我刚刚发现,如果我用一个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和单个字符的匹配,而不用二进制表示代替,无论区域设置如何,都应该能正常工作。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读