"grep -Rl" は、適切な空間をサポートする vi 引数で生成されます。

私は次のようなことをしようとしています。

vi `grep -Rl 'keyword'`

しかし、ファイル名のスペースをサポートしたいと思います。

vi "`grep -Rl 'keyword'`"

するいいえ必要な操作を実行すると、grep出力を\ nを含む単一の引数に変換します。

頑張った

vi "`grep -Rl 'keyword'`| xargs"

ビューは良くなりましたが、結果はまだ単一の引数です(今では\ nの代わりにスペースが含まれています)。

これを行うための良い方法はありますか? Bashは優れており、POSIX規格に準拠していることも利点です。

PS。

-R オプションはすべての grep 実装で動作するわけではなく、bash は``

ベストアンサー1

使用find:

find . -type f -exec grep -q 'pattern' {} \; -exec vi {} +

これは、現在のディレクトリ内または下のすべての一般ファイルで一致する行を探しますpattern。見つかったファイルに対してvi開始されます。

これらのファイルが何百もの場合、viバッチファイルが呼び出されます。-exec vi {} +ファイルごとに1回呼び出されるように変更されました-exec vi {} \;vi

grep -q実際には、出力にはまったく関心がなく、grep終了状態にのみ関心があるため、これを使用します。

これは有効なUnixファイル名を受け入れ、POSIXと完全に互換性があります(再帰でgrepはありません)。

おすすめ記事