Grep

‘grep -Rl’ 結果為具有適當空間支持的 vi 參數

  • March 30, 2019

我正在嘗試做類似的事情

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不是)。

引用自:https://unix.stackexchange.com/questions/509516