我正在尝试使用sed处理文件名列表,并用英语等同替换文件名中的每个外来字符。例如。
málaga.txt - > malaga.txt
我的脚本如下:
for f in *.txt
do
newf=$(echo $f | sed 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/')
mv $f $newf
done
目前这对文件名没有影响。但是,如果我使用相同的正则表达式来处理文本文件。 E.g。
cat blah.txt | sed 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/
它完美地运作 - 所有外国字符都用它们的英语等价物代替。任何帮助将不胜感激。这是在UNIX shell中的Mac OsX上。
答案 0 :(得分:1)
这应该这样做:
for f in *.txt; do
newf=$(echo $f | iconv -f utf-8-mac -t utf-8 | sed 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/')
mv $f $newf
done
iconv -f utf-8-mac -t utf-8
将文本从utf-8-mac转换为utf-8,它解决了@PavelGurkov和@ninjalj在评论中讨论的预组合/分解问题。