【问题标题】:Comparing two files with accented characters (Mac OS / Terminal)比较两个带有重音字符的文件(Mac OS / 终端)
【发布时间】:2014-06-14 21:21:55
【问题描述】:

目标:创建一个文件,列出两个文件中未找到的所有行

操作系统:Mac OS X,使用终端

问题:行包含重音字符 (UTF-8),比较似乎不起作用

我使用以下命令来比较两个文件:

comm -13 <(sort file1) <(sort file2) > file3

该命令工作正常,但文件中包含重音字符的行除外。你有什么解决办法吗?

我尝试过的一个非最佳方法是用sed -i 将所有重音字符替换为非重音字符,但这似乎不适用于我的两个文件之一,所以我假设一个文件被奇怪地编码(事实上​​,在 TextMate 中打开文件时,ü 显示为 u¨,但在 TextEdit 中正确显示为 ü - 我使用 find Photos/ -type f &gt; list_photos.txt 生成该文件以滚动浏览所有包含重音字符的文件名......也许我应该添加另一个参数find 命令放在首位?)。对此也有任何想法吗?

非常感谢。

更新:

我手动创建了带有重音字符的文本文件。 comm 命令无需 LC_ALL 即可工作。所以问题一定出在将文件名输出到文本文件中(find 命令)。

测试文件A:

Istanbul 001 Mosquée Süleymaniye.JPG
Istanbul 002 Mosquée Süleymaniye.JPG

测试文件B:

Istanbul 001 Mosquée Süleymaniye.JPG
Istanbul 002 Mosquée Süleymaniye - Angle.JPG
Istanbul 003 Ville.JPG

比较会产生预期的结果。但是当我自动创建这些文件时,我会在文本文件中获取 Su¨leymaniye。当我不生成输出文件时,终端会向我显示正确的单词 Süleymaniye。

非常感谢您的调查。非常感谢。

【问题讨论】:

    标签: macos terminal


    【解决方案1】:

    您需要为comm设置ENVIRONMENT

    环境 LANG、LC_ALL、LC_COLLATE 和 LC_CTYPE 环境变量影响 comm 的执行如 environ(7) 中所述。

    例如:

    LC_COLLATE=C comm -13 <(sort file1) <(sort file2) > file3
    

    LC_ALL=C comm -13 <(sort file1) <(sort file2) > file3
    

    【讨论】:

    • 嗯,谢谢...我刚刚尝试过,但仍然遇到同样的问题:-/。
    • 你能提供几行你正在尝试的文件吗?
    • 我更新了原始帖子(在最后),因为我无法以一种好的方式格式化这里的评论。非常感谢您对此进行调查,非常感谢。
    猜你喜欢
    • 2013-01-08
    • 1970-01-01
    • 2014-08-28
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2020-08-12
    • 2018-07-18
    相关资源
    最近更新 更多