mar*_*trz 5 bash diacritics transliteration
我有一个标签文件形式的反编译 stardict 字典
????? <tab> bad
Run Code Online (Sandbox Code Playgroud)
where<tab>表示表格。
不幸的是,定义单词的方式要求查询包含所有变音符号。因此,如果我想搜索 ????,我需要让所有 iotas 和抑扬符都正确。
因此,我想转换整个文件,以便删除关键字的变音符号。所以这条线会变成
????? <tab> <h3>?????</h3> <br/> bad
Run Code Online (Sandbox Code Playgroud)
我知道我可以在 bash 中逐行读取文件,如下所述 [1]
while read line
do
command
done <file
Run Code Online (Sandbox Code Playgroud)
但是有什么办法可以使转换线的操作自动化呢?我听说过iconv[2] 但没有设法使用它实现所需的转换。我最好使用 bash 脚本。
此外,是否有一种自动音译希腊语的方法,例如使用 Perseus 的方法?

/edit: 也许我们可以使用 Unicode 代码?我们可以注意到U+1F0x,U+1F8xforx < 8等都是字母 ? 的变体。这将减少手动工作量。我也接受 C++ 解决方案。
[1] http://en.kioskea.net/faq/1757-how-to-read-a-file-line-by-line
[2]如何从文件中删除所有变音符号?
您可以使用 Perl 相对轻松地从字符串中删除变音符号:
\n\n$_=NFKD($_);s/\\p{InDiacriticals}//g;\nRun Code Online (Sandbox Code Playgroud)\n\n例如:
\n\n$ echo '\xe1\xbd\xa6\xe1\xbd\xa2\xe1\xbf\xb6\xe1\xbd\xbc\xcf\x8e\xe1\xbd\xa0\xe1\xbd\xa4 \xe1\xbe\xaa' | perl -CS -MUnicode::Normalize -pne '$_=NFKD($_);s/\\p{InDiacriticals}//g'\n\xcf\x89\xcf\x89\xcf\x89\xcf\x89\xcf\x89\xcf\x89\xcf\x89 \xce\xa9\nRun Code Online (Sandbox Code Playgroud)\n\n其工作原理如下:
\n\n-CS为 Perl 的 stdin/stdout 启用UTF8-MUnicode::NormalizeUnicode 规范化库-e从命令行执行脚本;-n自动循环输入中的行;-p自动打印输出NFKD()将行转换为 Unicode 规范化形式之一;这意味着重音符号和变音符号被分解为单独的字符,这使得下一步更容易删除它们s/\\p{InDiacriticals}//g删除 Unicoded 表示为变音符号的所有字符事实上,这应该适用于删除具有良好 Unicode 支持的所有脚本/语言的变音符号等,而不仅仅是希腊语。
\n