bashシェルスクリプトで、テキストファイル内の文字列を配列内の要素で置換する方法を解説します。
はじめに
本記事では、テキストファイル内の文字列を配列内の要素で置換する方法を説明しています。
置換後のテキストファイルは、置換元のファイルとは別ファイルとして出力されます。
以下は、本スクリプトの実行イメージです。
配列=("要素1" "要素2" "要素3")
aa%%1aa bb%%2bb cc%%3cc
以下は、上記を置換した後のテキストファイルです。
aa要素1aa bb要素2bb cc要素3cc
置換元のテキストにある「%%n」が、対応する配列の要素番号の値で置換されます。
・文字列「%%1」なら、配列の1つ目の要素(要素番号0に格納された値)で置換
・文字列「%%2」なら、配列の2つ目の要素(要素番号1に格納された値)で置換
サンプルスクリプト
サンプルのスクリプトです。
使用する際は、3~9行目をご自身の環境に合わせて修正して頂ければと思います。
#!/bin/bash
# 置換元のファイル
inFile="inFile.txt"
# 置換後のファイル
outFile="outFile.txt"
# 置換後の文字列
array=("キーワード1" "キーワード2" "キーワード3")
# 置換後のファイルを削除
rm ${outFile} > /dev/null 2>&1
# 置換元ファイルの読み込み
bufFile=(`cat ${inFile}`)
# 読み込んだファイルを1行ずつ処理
for line in "${bufFile[@]}"
do
# 配列の要素数のカウンタ
cnt=0
# 配列の要素数分ループ
for param in "${array[@]}"
do
# インクリメント
cnt=$((++cnt))
# 文字列に%%nが含まれる場合に実行
if [[ ${line} == *%%${cnt}* ]]; then
# 文字列の置換
line=`echo ${line} | sed -e "s/%%${cnt}/${param}/g"`
fi
done
echo ${line} >> ${outFile}
done
使用例
使用例と実行結果です。
シェルの実行コマンドです。
引数などは不要でシェルを実行するだけです。
sh test.sh
置換前後のファイルのdiffです。
diff inFile.txt outFile.txt 1,5c1,5 < aaa%%1aaa < bbb%%2bbb < ccc%%3ccc < ddd%%1ddd < eee%%2,%%3eee --- > aaaキーワード1aaa > bbbキーワード2bbb > cccキーワード3ccc > dddキーワード1ddd > eeeキーワード2,キーワード3eee
リンク
コメント