有时我需要搜索带有重音符号的文件(通常是变音符号),通常是使用locate / mlocate。我希望进行设置(也许在中/etc/updatedb.conf
),这样我就可以使用某种语言映射来搜索这些特殊字符,例如:
a == âàáäÂÀÂÄ
e == êèéëÊÈÉË
i == îïíÎÏ
o == ôöóÔÖ
u == ûùüÛÜÙ
c == çÇ
n == ñ
因此,locate -i liberación
还要搜索具有字符串liberacion甚至liberaciòn的文件。
注释和假设
- 也许还有其他人:ÁÃÀÀÁÆÇÈÉÊËÌËÎÐÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãääææçèéêëëííïï¯ðñòóôõöøùúûüýþÿ。
- 这是浪漫语言(如西班牙语,法语和德语)中的常见情况。
- 我始终使用100%UTF-8语言环境。
- 我宁愿不必使用正则表达式。
- 补丁程序可能会像Unidecode / cUnidecode一样使用Unicode的ASCII音译。大部分mlocate是用C语言编写的。
有关
- 类似的问题,但使用
find
- MiloslavTrmač(
mlocate
开发人员)在这里说,官方源代码位于pagure.io上(以及Github上的fork上)。 - 我在Pagure.io的mlocate repo上提出了一个问题,以添加此功能。
- 2018年2月更新:此问题可以通过marcotrevisan的请求请求解决。将添加一个
-t
/--transliterate
支持iconv
以匹配重音。 - 更新2018-03:Ubuntu 18.04 LTS Bionic Beaver(v2和v3.1)现在包含对它的
mlocate
支持。--transliterate
- 2018年2月更新:此问题可以通过marcotrevisan的请求请求解决。将添加一个
grep -f
或fgrep
避免将其解释"$CH"
为特殊字符,例如,grep ^
将匹配任何行,但grep -f ^
仅匹配包含该字符的行^
。使用字符类来编写正则表达式REG="[$CHARS]"
也可能会更容易,即可能比您的sed
命令更容易。不过要当心特殊字符!否则是个好方法。+1