我必须将文件夹中的xml文件列表从UTF-16转换为UTF-8,删除BOM,然后将文件中的关键字从UTF-16替换为UTF-8。
我正在使用cygwin来运行一个bash shell脚本来完成这个,但是我从来没有在今天之前使用过SED,我需要帮助!
我发现了一个用于删除BOM的SED单线程,现在我需要另一个用于将文本从UTF-16替换为xml标题中的UTF-8。
这是我到目前为止所做的:
#!/bin/bash
mkdir -p outUTF8
#Convert files to unix format.
find -exec dos2unix {} \;
#Use a for loop to convert all the xml files.
for f in `ls -1 *.xml`; do
sed -i -e '1s/^\xEF\xBB\xBF//' FILE
iconv -f utf-16 -t utf-8 $f > outUTF8/$f
sed 's/UTF-16/UTF-8/g' $f > outUTF8/$f
echo $f
done
然而,这一行:
sed 's/UTF-16/UTF-8/g' $f > outUTF8/$f
正在挂起脚本。关于适当格式的任何想法?
答案 0 :(得分:2)
尝试这样的事情 -
for filename in *.xml; do
sed -i".bak" -e '1s/^\xEF\xBB\xBF//' "$filename"
iconv -f utf-16 -t utf-8 "$filename" > outUTF8/"$filename"
sed -i 's/UTF-16/UTF-8/g' outUTF8/"$filename"
done
第一个sed
将使用扩展名.bak
备份原始文件。然后它将使用iconv
转换文件并将其保存在具有相同文件名的新创建的目录下。最后,您将使用sed
进行文件内更改以删除文本。
答案 1 :(得分:1)
2件事
你的$ f文件有多大,如果真的很大,可能需要很长时间才能完成。
Opps,我看到你的循环底部有一个echo $f
。在sed命令之前移动它,以便查看文件名中是否有空格。
2A :-)。或者只是将对$f
的所有引用更改为"$f"
以防止出现空格。
我希望这会有所帮助。