2016-05-18 103 views
2

我正在嘗試使用sed來處理文件名列表,並用英語同義字替換文件名中的每個外部字符。例如。使用UNIX Bash腳本替換英文文件名中的外來字符

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ÜÜÜÜ/ 

它的工作原理非常完美 - 所有外來字符都用它們的英文等值替換。任何幫助將不勝感激。這是在UNIX外殼的Mac OsX上。

+0

不錯,但告訴我什麼是外來字符? ;) – sjsam

+0

我指的是這樣的字符:āáǎàēéěèīííììóóǒòūúǔùǖǘǚǜāÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ – Binaromong

+0

對你而言,一種外來語言可能是本地語言,也就是我的意思。你不必進一步解釋。你的問題很明顯,你試圖達到什麼:) – sjsam

回答

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意見討論的預組合/分解問題轉化。

+0

這很好。謝謝 :-) – Binaromong