我正在尝试使用sed处理文件名列表,并将文件名中的每个外语字符替换为对应的英文字符。例如:
málaga.txt -> malaga.txt
我的脚本如下:
málaga.txt -> malaga.txt
我的脚本如下:
for f in *.txt
do
newf=$(echo $f | sed 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/')
mv $f $newf
done
这目前对文件名没有影响。但如果我使用同样的正则表达式处理文本文件,则会产生影响。例如:
cat blah.txt | sed 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/
它的表现非常完美 - 所有的外文字符都被替换为它们的英文对应字符。任何帮助将不胜感激。这是在 Mac OsX 中的 UNIX shell 上。
echo -n 'Ã' | hexdump -C
将给你c3 83
,当在目录中ls命名为Ã
和a
的两个文件时,无论什么原因,Ã
将给你41 cc 83
。希望能有所帮助。 - Pavel Gurkov