【bashシェル】ファイル内の文字列を配列にある要素で置換する


この記事はプロモーションを含みます。

bashシェル

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

使用例

使用例と実行結果です。

置換元のファイル
aaa%%1aaa
bbb%%2bbb
ccc%%3ccc
ddd%%1ddd
eee%%2,%%3eee

シェルの実行コマンドです。
引数などは不要でシェルを実行するだけです。

sh test.sh
置換後のファイル
aaaキーワード1aaa
bbbキーワード2bbb
cccキーワード3ccc
dddキーワード1ddd
eeeキーワード2,キーワード3eee

置換前後のファイルの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

コメント

タイトルとURLをコピーしました