gpt4 book ai didi

正则表达式匹配 sed 中的非 ASCII 字符

转载 作者:行者123 更新时间:2023-12-04 10:11:07 26 4
gpt4 key购买 nike

考虑以下 sed 正则表达式替换:

$ echo 'oóO' | sed -e 's/[^a-z]/./g'
oó.

对我来说,这表示“用 a 替换不在 z. 范围内的所有字符,所以我希望输出 o.. 因为 ó 或 O 都不在 a-z 的范围内任何编码中的“代码点”意义(FWIW,我使用的是 UTF-8)。

这是怎么回事?

我如何制作一个仅匹配完全匹配的范围 [abcdefhijklmnopqrstuvwxyz]不把它全部写出来?

这是 locale 的输出在我的系统上:
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=

最佳答案

基于 suggestion 的变体由 Quasímodo,设置 LC_COLLATE=Csed命令工作:

$ echo 'oóO' | LC_COLLATE=C sed -e 's/[^a-z]/./g'
o..

关键是将整理顺序更改为“C”,以便在排序(整理)顺序中o和p之间不再出现ó,但不要更改 LC_CTYPE (或 LC_ALL ),以便仍能正确解释多字节 UTF-8 字符(这就是 LC_ALL=C 不起作用的原因)。

关于正则表达式匹配 sed 中的非 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61329184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com