LoginSignup
0
0

More than 5 years have passed since last update.

xmlファイルの要素をterminalから変更する方法

Posted at

xmlの要素にファイル名が書かれてあり、その要素に拡張子「.jpg」を追加したい場合、terminalからどのように変更するのかを調べてみました。

Before : <filename>IMG_1928</filename>
After : <filename>IMG_1928.jpg</filename>

ファイル内のデータを加工する場合はsedというコマンドを使うようです。

sed -i -e 's/変換前の文字列/変換後の文字列/g' ファイル名

この変換前の文字列には正規表現が使えるため、この場合は4桁の数字の後に「.jpg」をつけるようにしました。
以下のようになります。

sed -i -e 's/\([0-9]\{4\}\)/\1.jpg/g' sample.txt

「\」は環境によっては円マーク「¥」になったりします。
「\1」は正規表現の参照場所で、この場合は最初の該当場所という扱いだと思います。
また、変換を行うとなぜか「.xml-e」ファイルが生成されます。これが何か分かりませんでした。何だろ。。。

自動化してみる

xmlデータが大量にあり、同じようにファイル名に「.jpg」の拡張子をつける必要があったため、
シェルスリプトで自動化してみました。

files="./*"

for filePath in $files; do
  if [ -d $filePath ] ; then
    for i in $filePath; do
      for file in `\find $i -maxdepth 1 -name '*.xml'`; do
        base=${file%.*}
        replaceFile=$base".xml"
        sed -i -e '3s/\([0-9]\{4\}\)/\1.jpg/g' $replaceFile

        deleteFile=$base".xml-e"
        rm -f $deleteFile
      done
    done
  fi
done

実際のxmlデータは、3行目に<filename>IMG_1928.jpg</filename>があったため、
sedで変換する際に'3s/と3行目を変換することを明確にしてます。また、変換後になぜか生成される「.xml-e」ファイルを後で削除しています。

実際のスクリプトとテストデータはgithubに上げてあります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0