1. ホーム
  2. linux

[解決済み] コマンドライン:grepでマッチしたすべてのファイル名の検索と置換

2023-07-18 22:26:10

質問

grepでマッチしたすべてのファイルの文字列を検索し、置換しようとしています。

grep -n 'foo' * と入力すると、次のような出力が得られます。

[filename]:[line number]:[text]

grep が返す各ファイルについて、ファイルを修正するために foobar .

どのように解決するのですか?

grepでマッチしたすべてのファイルの文字列を検索して置き換えるということですか?

perl -p -i -e 's/oldstring/newstring/g' `grep -ril searchpattern *`

編集

これはかなり人気のある質問のようなので、私は更新することを考えました。

今日、私はほとんど ack-grep を使うことが多いです。ということで、上のコマンドはこうなります。

perl -p -i -e 's/old/new/g' `ack -l searchpattern`

ファイル名の空白を処理するために、実行することができます。

ack --print0 -l searchpattern | xargs -0 perl -p -i -e 's/old/new/g'

を使えば、もっといろいろなことができます。 ack-grep . 例えば、HTMLファイルだけに検索を限定したいとします。

ack --print0 --html -l searchpattern | xargs -0 perl -p -i -e 's/old/new/g'

そして、ホワイトスペースが問題でなければ、さらに短くなります。

perl -p -i -e 's/old/new/g' `ack -l --html searchpattern`
perl -p -i -e 's/old/new/g' `ack -f --html` # will match all html files