GNU/Linux >> Linux の 問題 >  >> Linux

コマンド ライン:grep に一致するすべてのファイル名を検索して置換します

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

あなたが与えた例に基づいて、これはあなたが望むもののようです:

sed -i 's/foo/bar/g' *

再帰的ではありません (サブディレクトリに降りることはありません)。ツリー全体で選択したファイルを置き換える良い解決策として、find:

を使用します。
find . -name '*.html' -print -exec sed -i.bak 's/foo/bar/g' {} \;

*.html ファイルが一致しなければならない式、.bak -i の後 元のファイルのコピーを作成し、.bak 拡張子 (任意の拡張子を指定できます) と g を付けます。 sed 式の最後にある sed は、(最初の 1 つだけではなく) 1 行で複数のコピーを置き換えるように指示します。 -print 検索は、一致したファイルを表示するのに便利です。これはすべて、システム上のこれらのツールの正確なバージョンによって異なります。


Linux
  1. Linuxでコマンドラインからファイルとディレクトリを削除する方法

  2. Linuxでコマンドラインからファイルを分割して結合する方法

  3. 実行する前に再帰的なSed検索をテストして置き換えますか?

  1. コマンドラインと Xargs でファイルの名前を一括変更する

  2. Macのコマンドラインから現在のフォルダーとすべてのサブフォルダーの.DS_STOREファイルを削除します

  3. mv コマンドですべてのファイルとフォルダーを移動する方法

  1. Command Grepを使用して検索しますか?

  2. Linuxコマンドラインでファイルとディレクトリを削除する方法[初心者向けチュートリアル]

  3. Mac および Linux でのテキスト ファイルでの再帰的な検索と置換