gpt4 book ai didi

macos - OSX 上的 LANG 和 sed

转载 作者:行者123 更新时间:2023-12-04 06:48:35 24 4
gpt4 key购买 nike

在最近 question注意到在 OSX 上在非 ascii 文件上运行 sed 给出了奇怪的结果。例如,如果你这样做(/usr/bin/cal 是一个随机的二进制文件)

sed 's/[^A-Z]//' /usr/bin/cal
sed将删除除 A-Z 之外的所有可打印字符,但仍保留许多不可打印字符。但是,如果您这样做
LANG='' sed 's/[^A-Z]//' /usr/bin/cal

仅输出 A-Z(和换行符)。为什么?

通常 LANG=en-US.UTF-8到底是怎么回事?无论如何,我看不出 sed 的输出在 UTF-8 中可以被认为是正确的。它坏了,还是有一些我不明白的工作概念?

我知道 OSX sed 符合 POSIX,因此与心爱的 GNU sed 不同。

最佳答案

二进制数据,例如/usr/bin/cal 的内容,不是 UTF-8,因此会混淆任何读取它的代码,就好像它是。特别是,任何设置了高位(例如,>= 128)的字节都将被解释为表示单个字符的多字节序列的一部分,因此将从输出中省略。并非所有设置了高位的字节序列都是有效的 UTF-8,所以事情会变得很困惑,但这可能解释了为什么一些不可打印的字符仍然存在,但(可能)不是其他字符。

简而言之:如果您想对二进制数据使用面向文本的工具,请不要。

关于macos - OSX 上的 LANG 和 sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3436519/

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