すべてのファイルの行を再帰的に検索して削除する


14

私は使用してキーワードの出現をgrepすることができました

grep "KeyWord" . -r -n -i -I 

しかし、KeyWordの発生は大きすぎます。その単語を含むすべての行を削除したいだけです。

私はあちこち検索しましたが、sedはユーティリティのように見えます。誰がどのコマンドがトリックを行うのか教えてもらえますか?

ありがとう。

回答:


25

GNU sedの場合:

find . -type f -print0 | xargs -0 sed -i /KeyWord/d

OSX sedの場合:

find . -type f -print0 | xargs -0 sed -i '' /KeyWord/d

最初のコマンドfindは、すべての標準ファイル(ディレクトリ、パイプなどではない)を検索し、それらを区切って出力し\0ます(したがって、ファイル名にはスペース、改行などを含めることができます)。

2番目のコマンドは、xargsの出力を読み込みfind、グラブセパレータ(に基づいてリスト\0ための-0)、呼び出すsed -i [...]リストから追加パラメータでは、(sed多くのファイルが存在する場合のパラメータの最大長が制限されるように、複数回呼び出されます各呼び出し)。

このsedコマンドは、インプレース(-i)を変更します。

に関しては/KeyWord/d、正規表現を含む行を削除しますKeyWord

sed(単純だが珍しい)構文を適切に理解することを学び、関連するツールの詳細については、適切なマンページを参照してください。


そして、私が促進したいzshので、拡張されたグロブを持つソリューション:

sed -i /KeyWord/d **/*(.)

「キーワード」という単語を削除するのはどうですか。行全体ではありませんか?
-SurenNihalani

s/KeyWord//g(代替KeyWord空の文字列(「」付き)、gすべての(だけでなく、各行の最初の)について。
ピエールキャリア

1

ExモードでVimを使用できます:

find -type f -exec ex -sc g/KeyWord/d -cx {} ';'
  1. g グローバル検索

  2. d 削除する

  3. x 保存して閉じます


OSXで私を与えてfind: illegal option -- t、追加する必要がありました. find . -type f -exec ex -sc g/KeyWord/d -cx {} ';'
エリック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.