【发布时间】:2011-12-22 23:14:27
【问题描述】:
我必须将文件夹中的 xml 文件列表从 UTF-16 转换为 UTF-8,删除 BOM,然后将文件中的关键字从 UTF-16 替换为 UTF-8。
我正在使用 cygwin 运行 bash shell 脚本来完成此操作,但我在今天之前从未使用过 SED,我需要帮助!
我找到了一个用于删除 BOM 的 SED 行,现在我需要另一个用于将 xml 标头中的文本从 UTF-16 替换为 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
正在挂起脚本。关于这个的正确格式有什么想法吗?
【问题讨论】:
-
为什么不使用
sed -i 's/UTF-16/UTF-8/g' outUTF8/$f而不是sed 's/UTF-16/UTF-8/g' $f > outUTF8/$f -
这不是唯一的问题,而是将
for f in `ls -1 *.xml`; do更改为for f in *.xlm和$f更改为"$f" -
是的,我同意这将阻止它拆分包含空格的文件。另外,
sed -i -e '1s/^\xEF\xBB\xBF//' FILE我真的不知道FILE是什么,它的目的是什么? -
文件不应该在那里。我把它拿出来了。