2011-12-22 21 views
0

フォルダ内のXMLファイルのリストをUTF-16からUTF-8に変換し、BOMを削除して、ファイル内のキーワードをUTF-16からUTF-8に置き換える必要があります。xmlファイルのテキストをSEDで検索して置き換える方法は?

私はこれを達成するためにbashシェルスクリプトを実行するためにcygwinを使用していますが、今日はSEDで作業したことがありません。

BOMを削除するためのSEDライナーが1つ見つかりましたが、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 

は、スクリプトをぶら下げています。これのための適切な形式としての任意のアイデア?

+0

なぜ 'sed '/ UTF-16/UTF-8/g'の代わりに' sed -i '/ UTF-16/UTF-8/g' outUTF8/$ f'をしないのですか? > outUTF8/$ f' –

+2

これは唯一の問題ではありませんが、\ 'ls -1 * .xml \'のfのために変更します。 'f * in * .xlm'と' $ f'から '' $ f "'へと 'do'を実行します。 –

+0

これは、ファイルにスペースが含まれていることを防ぐためです。また、 'sed -i -e '1s/^ \ xEF \ xBB \ xBF //' FILE'' FILE'とは何なのですか? –

答えて

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でファイル内の変更を行い、テキストを削除します。

+0

まあ、すべてがほとんど働いた。私はまだファイルのヘッダに<?xml version = "1.0" encoding = "utf-16"?>を持っています。私は<?xml version = "1である必要があります。"0" encoding = "utf-8"?>これはファイルが変換されたものなので、スクリプトはもはやぶら下がっていませんが、最後まで実行されています –

+0

最後の 'sed'行この 'sed -i 's/utf-16/utf-8/g' outUTF8 /" $ filename "' –

+0

をすべて大文字にして作りました:sed -i 's/UTF-16/UTF-8/g 'out/"$ filename"ですが、まだテキストを置き換えていません。ファイルのプロパティをチェックしたところ、アクセス権の問題はありません –

1

2物事

  1. それは本当に大きいです場合、それだけで完了するために長いがかかる場合があります、あなたの$ Fファイルどのくらいです。

  2. Oppsのように、ループの最後にecho $fがあります。ファイル名にスペースが含まれていないか確認できるようにsedコマンドの前に移動します。

2a :-)。スペースを守るために、すべて$fへの参照を"$f"に変更してください。

こちらがお役に立てば幸いです。

+0

ファイル名にスペースがある場合、forループもこの形で失敗します。 –

+0

最大は88kbです。 –

+0

OKサイズが問題のようには思われません。あなたのファイル名にスペースがありますか? @ JaypalSinghは現在のすべての問題を抱えているようだ。これにより問題が解決するか、コードがまだハングしますか?がんばろう。 – shellter

関連する問題