Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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に上げてあります。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away