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