如何編寫bash shell腳本(在Mac OS X中)以將特殊字符(如ä,ö,ü)轉換爲各種文件的名稱?使用sed不起作用:在bash shell腳本中轉換特殊字符
echo * | sed s/ü/ue/
我可以用其他方式嗎?
編輯
下面是完整的腳本。它基本上拉鍊了iPhone應用程序包和zip文件名,然後(應該)將任何特殊字符:
#/bin/bash
for appfile in *.app
do
zipfile=`echo ${appfile} | sed s/app/zip/`
zipfile=`echo ${zipfile} | sed s/\ /_/`
# these don't work...
zipfile=`echo ${zipfile} | sed s/ä/ae/`
zipfile=`echo ${zipfile} | sed s/ö/oe/`
zipfile=`echo ${zipfile} | sed s/ü/ue/`
zipfile=`echo ${zipfile} | sed s/ß/ss/`
# make zip
zip -ruy0 "${zipfile}" "${appfile}"
done
編輯
明白了!訣竅是通過iconv運行文件名來轉換編碼。我做這個做AOU替換之前,它的工作:
zipfile=`echo ${zipfile} | iconv -f utf-8-mac -t utf-8`
在循環中產生'sed'幾次可能會很昂貴。你可以結合你的替換:'sed's /ä/ ae/g; S/O/OE /; ...「'。另外,Bash可以像這樣做:'zipfile = $ {zipfile //ä/ ae /}'(但它們必須單獨完成)。 – 2010-09-01 15:36:48
感謝您的提示,儘管在這種情況下,性能並不是真正的問題。但無論如何,這很好。 – ian 2010-09-02 07:26:41