忍者ブログ

素人翻訳

適当に翻訳する。

プログラムを読みやすくするために同一のファイルを2回走査することにした。

あるディレクトリ下にある全てのファイルに対して特定文字列の検索と置換を行い、置換が行われたファイルの名前だけを記録したいと考えた。
文字列置換が一切行われなかったファイルの名前は記録しないことにした。

そして、できれば同じファイルを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回読んでもそれほど問題にならないと考えた。

PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

カレンダー

01 2026/02 03
S M T W T F S
1 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28

最新コメント

[07/08 NONAME]
[07/08 NONAME]
[09/07 NONAME]
[08/18 NONAME]
[05/18 NONAME]

最新記事

(02/02)
(02/02)
(11/26)
(11/25)
(07/01)
(01/10)
(01/03)
(12/20)
(12/08)
(11/20)
(10/30)
(10/24)
(09/20)
(09/16)
(09/11)
(09/03)
(09/02)
(08/27)
(08/17)
(07/31)
(07/30)
(07/19)
(07/13)
(05/02)
(03/17)

ブログ内検索

広告

バーコード

広告