回答:
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 **/*(.)
s/KeyWord//g
(代替KeyWord
空の文字列(「」付き)、g
すべての(だけでなく、各行の最初の)について。