目标:创建一个文件,列出在任一文件中找不到的所有行
操作系统:Mac OS X,使用终端
问题:行包含重音字符(UTF-8),并且比较似乎不起作用
我使用以下命令比较两个文件:
comm -13 <(sort file1) <(sort file2) > file3
除了包含重音字符的文件中的行外,该命令工作正常。你有任何解决方案吗?
我尝试过的一个非理想的事情就是用sed -i
替换带有非重音符号的所有重音字符,但这似乎不适用于我的两个文件之一,所以我假设一个文件是怪异编码(实际上,当在TextMate中打开文件时显示ü但在TextEdit中正确显示为ü - 我使用find Photos/ -type f > 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。
很多,非常感谢您对此进行调查。非常感谢。
答案 0 :(得分:0)
您需要为comm
设置环境。
环境 LANG,LC_ALL,LC_COLLATE和LC_CTYPE环境变量会影响 如environ(7)中所述执行comm。
例如:
LC_COLLATE=C comm -13 <(sort file1) <(sort file2) > file3
或
LC_ALL=C comm -13 <(sort file1) <(sort file2) > file3