比较带有重音字符的两个文件(Mac OS / Terminal)



目标:创建一个文件,列出所有文件中没有的行

OS: Mac OS X,使用Terminal

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

我使用了下面的命令来比较两个文件:

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

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

我尝试过的一个非最佳的事情是将所有重音字符替换为sed -i的非重音字符,但这似乎对我的两个文件中的一个不起作用,所以我假设一个文件被奇怪地编码(事实上,在TextMate中打开文件时显示为ü,但在texttedit中正确地显示为ü -我使用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。当我不生成输出文件时,终端会显示正确的单词sysleymaniye。

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

您需要为comm设置ENVIRONMENT

环境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

最新更新