カレントディレクトリ内のファイル内の%キーワード%を%置換後文字列%に置換するイメージです。
for file in$(find -maxdepth 1 -type f | xargs grep-F'%キーワード%' | awk'{sub(":","",$1);print $1}');do sed-i's %キーワード% %置換後文字列% g'$file;done
サンプルファイル
$ cat aaa.txt
hoge
$ cat bbb.txt
hogehogehogheoghogefuga
カレントディレクトリ内のファイルを列挙します
find -maxdepth 1 -type f
各ファイル内の%キーワード%を検索します
| xargs grep-F'%キーワード%'
ここまでで以下のような出力が得られます。
$ find -maxdepth 1 -type f | xargs grep-F'hoge'
./bbb.txt: hogehogehogheoghogefuga
./aaa.txt: hoge
左端のファイル名だけ得られるように、
以下をつなげます。(:が邪魔なので、awkでsubを使って除去します)
| awk'{sub(":","",$1);print $1}'
こんな感じになります
$ find -maxdepth 1 -type f | xargs grep-F'hoge'| awk'{sub(":","",$1);print $1}'
./bbb.txt
./aaa.txt
この結果をforにかけて、sedで置換します
$ for file in$(find -maxdepth 1 -type f | xargs grep-F'hoge'| awk'{sub(":","",$1);print $1}');do sed-i's hoge moge g'$file;done
以下のように置換されました
$ cat aaa.txt
moge
$ cat bbb.txt
mogemogehogheogmogefuga
もう少し簡潔に書き方も考えたいと思います。
あと、テキストが左端から開始しているとうまくいかないので別途考えたいと思います。