gpt4 book ai didi

macos - ls -l | grep 列出文件

转载 作者:行者123 更新时间:2023-12-01 11:00:46 25 4
gpt4 key购买 nike

我想列出带有字符 é 的文件 我执行这个命令:

ls -l | grep é

没有结果。目录内容:

-rw-r--r--  1 user  staff     5020  3 may 11:48 begin
-rw-r--r-- 1 user staff 0 13 jun 08:47 canté
-rw-r--r-- 1 user staff 0 13 jun 08:47 centré
-rw-r--r-- 1 user staff 5020 3 may 11:48 end

语言环境配置

LANG="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_CTYPE="es_ES.UTF-8"
LC_MESSAGES="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_ALL=

在 Mac Os X 10.7.3 上运行命令。有什么问题吗?

最佳答案

像“é”这样的字符可以用两种不同的方式在 Unicode 中表示。它可以是单个预组合的 Unicode 字符,带尖音符 U+00E9 的拉丁文小写字母 E,也可以分解为两个字符,小写拉丁文字母 E U+0065,后跟组合尖音符 U+0301。

在 Mac OS X 上,文件系统 API 总是规范化为规范化形式 D (NFD) 的特殊变体。在适当的 NFD 中,所有可以分解的字符都是。在 Mac OS X 文件系统 API 使用的 NFD 变体中,为了与旧卷向后兼容,保留了一些字符。

无论如何,我怀疑在终端中输入的字符形式与 ls 输出的形式不同。我会比较 ls -l | 之间的区别hexdump -Cecho -né |十六进制转储-C。 (在这两种情况下,您都会得到 UTF-8。因此,U+00e9 将显示为 c3 a9,而 U+0065 U+0301 将显示为 65 cc 81。)


更新:通过一些测试,我发现这可行:

ls -l | grep $(printf "e\xcc\x81")

这类似于 sarnold 的建议,也有效:

ls -l *$(printf "e\xcc\x81")*

基本上,我在子 shell 中使用 printf 作为输入文件名中使用的精确字节序列的方法。以正常方式键入字符会产生不匹配的不同字节序列。

关于macos - ls -l | grep 列出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11041580/

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