bashにて置換・挿入を行えるツールを作成したいと考えています。
ツールイメージは下記です。
①指定パス配下(サブディレクトリも含む)存在するファイルをパスごと取得し、テキストファイルに1行ずつリスト化するよう出力する。
→find パス名 -print >>list.txt
➁for文を使用し、①でリスト化(list.txt)に記載のあるパス+ファイル名を読み取り、全ての指定した置換対象文字列の前後行に指定の文字列挿入
③置換対象文字列を全て置換
現在記載しているコードは以下です。(序盤省略)
bash
1#!/bin/sh -f 2 3#$1置換対象とするファイルが存在する場所を指定 4#$2置換対象とする文字列 5#$3置換後の文字列 6 7~~~省略~~~ 8find $1 -print >>list.txt 9 10for file in `cat list.txt` 11do 12 sed `/$2/s/^/[前行用挿入文字列] $file &&/ 13 sed `/$2/s/$/[後行用挿入文字列] $file &&/ 14 sed `s/$2/$3/g` $file>$file.bak 15done
▲問題・改善したい内容
①sedコマンドを使用する際、行末に&&/を使用している。
⇒仮に置換対象ファイルに3つの置換対象文字列が存在した場合、3つの文字列に対してそれぞれ挿入・置換を行いたいがために
記載をしてみたが思うようにいかない。
➁置換前文字列と置換後文字列を引数で実施している。
⇒1つのファイルに対して複数パターンの文字列を置換したい場合がある。
そのため更にfor文等を使用・及び、置換前文字・置換後文字リストを予めテキストファイル等に用意し
リストに記載のある置換パターンを全て実施できるようにしたい。
現状としてシェルを独学で学習(本・インターネット)し、記載してみたが手詰まり…という形です。
プログラミング自体初心者ではありますが、ご回答いただけると幸いです。
●補足(置換・挿入イメージ)
例)置換対象ファイル内容
aaa
bbb
ccc
ddd
eee
置換&挿入後(bbbが置換対象文字列とし、bbb前後行に文字列(下記例だと「~挿入及び置換Start~と~挿入及び置換End~」)を挿入しbbbをzzzに置換)
aaa
~挿入及び置換Start~
zzz
~挿入及び置換End~
ccc
ddd
eee
という形にしたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。