gpt4 book ai didi

regex - 带有 BRE '.' 的 sed(在 osx Snow Leopard 上)不匹配字符 > ascii 127

转载 作者:行者123 更新时间:2023-12-01 15:44:43 28 4
gpt4 key购买 nike

我在 Mac Os X Snow Leopard 上运行 sed。

sed 是/应该是 BSD sed(手册页日期为 2005-05-10)手册页指出:

The sed utility is expected to be a superset of 
the IEEE Std 1003.2 (``POSIX.2'') specification.

当我尝试替换时,输入流包含大于 ascii 127 的字符,点与该字符不匹配。

例如

echo -e "a001\0001a - a127\0177a - a128\0200a - a255\0377a - a061\0075a" \
| sed -e 's/a[0-9]\{3\}.a/match/g;' ;
echo "result: $?";

输出结果:

match - match - a128?a - a255?a - match
result: 0

在 Os X Maverick 上(说明相同的手册页),结果报错:

sed: RE error: illegal byte sequence
result: 1

在 linux Mint 13 系统上,同样的指令返回(我的预期):

match - match - match - match - match
result: 0

根据 http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_03这 '。'应该匹配

"any character in the supported character set except NUL".

如果运行这个类似的命令(在 Os X Snow Leopard 上的 gsed 版本 4.2.1):

echo -e "a001\0001a - a127\0177a - a128\0200a - a255\0377a - a061\0075a"\
| gsed -e 's/a[0-9]\{3\}.a/match/g;';
echo "result: $?";

我得到了相同的(对我来说出乎意料的)结果:

match - match - a128?a - a255?a - match
result: 0
  1. 其他人有同样的行为吗?
  2. 可以解释为什么吗? (这是 BSD 中的错误吗??)和/或如何规避/修复?我只能猜测它与“支持的字符集”有关然后在不同的系统上会有所不同....特别是因为在 SL 系统上,BSD sed 和 GNU sed 的行为相同。但是我确实已经检查并更改了我的环境:在 SL 系统上:

    $> env | grep '^L'
    LANG=en_US.UTF-8
    LANGUAGE=en_US:en
    LC_CTYPE=UTF-8

    在 Mint 系统上:

    $user@Mint > env | grep '^L'
    LANG=en_US.UTF-8
    LANGUAGE=en_US:en
    LC_CTYPE=UTF-8

最佳答案

您的语言环境是 UTF-8,但您回显的字节序列不是有效的 UTF-8,因为 \0200a\0377a。如果您使用 set LC_ALL=en_US.ISO8859-1 (iso-latin-1),那么它工作正常,因为 echo 的结果是一个有效的 iso-latin- 1 个字符串。

关于regex - 带有 BRE '.' 的 sed(在 osx Snow Leopard 上)不匹配字符 > ascii 127,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20072372/

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