適当に翻訳する。
あるディレクトリ下にある全てのファイルに対して特定文字列の検索と置換を行い、置換が行われたファイルの名前だけを記録したいと考えた。
文字列置換が一切行われなかったファイルの名前は記録しないことにした。
そして、できれば同じファイルを2度走査したくない。
例えば、次の bash スクリプトの場合、「ファイル名」のファイルを2回走査している。(grepとsed)
grep -q "検索文字列" "ファイル名"
if [ $? -eq 0 ]; then
echo "ファイル名" >> output.txt
sed -i s/検索文字列/置換文字列/g "ファイル名"
fi
sed の戻り値を適切に設定してそれを確認することによって、1回の走査で目的を達成したかった。
いろいろと調べたところ、実際に sed で上記のことを行うのは可能であった。
sed のパターンスペースとホールドスペースを駆使して、置換が行われたか(検索文字列が存在したかどうか)を確認し、その結果によって返り値を変更するという方法である。
参考URL1:Return value of sed for no match
参考URL2:置換ができない/複数ある場合に sed の終了コード0以外にする
しかし、この方法だと、時間が経ってからコマンドを見返した時、処理内容を理解するまでに少し時間がかかってしまう。(自分の場合。)
そのため、最初に挙げた grep と sed で2回ファイルを走査するやり方で行くことにした。
令和のパソコンならテキストファイルを2回読んでもそれほど問題にならないと考えた。
カレンダー
カテゴリー
最新記事
ブログ内検索
広告