Grep
‘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 具有用於````.
使用
find
:find . -type f -exec grep -q 'pattern' {} \; -exec vi {} +
這將在目前目錄中或下方的每個正常文件中查找匹配的行
pattern
。對於這些找到的文件,vi
將啟動。如果有數百個這樣的文件,
vi
將被批量呼叫文件。更改-exec vi {} +
為為每個文件-exec vi {} \;
呼叫一次。vi
我們使用
grep -q
,因為我們實際上對輸出根本不感興趣grep
,只對它的退出狀態感興趣。這將允許任何有效的 Unix 文件名,並且完全符合 POSIX(遞歸
grep
不是)。