2013-05-09 36 views
2

我想在文件中搜索一個字符串,並將生成的文件列表通過管道傳送到OSX的「打開」命令,從而在默認編輯器(又名非vim)中打開所有包含該字符串的文件以進行編輯。Mac打開grep文件列表

例如,運行:

find . -name "*.txt" | xargs grep -l "RANDOMSTRING" 

可能返回:

./folder1/file1.txt 
./folder1/file2.txt 
./folder2/file3.txt 
./file4.txt 

然而,僅僅管道此列表打開命令失敗:

find . -name "*.txt" | xargs grep -l "RANDOMSTRING" | open 

我認爲這是因爲「換行」或「回車」因爲運行:

open ./folder1/file1.txt ./folder1/file2.txt ./folder2/file3.txt ./file4.txt 

的作品。

我只是不確定如何從返回的輸出中刪除換行符並將其傳遞給打開的命令。我需要另一個命令通過管道輸出,這將正確地格式化文件列表,然後將列表通過管道打開命令。雖然換行符可能不是問題。

P.S. - 我不要想創建一個臨時文件來做到這一點。然而,我很樂意創建一個.zshrc或.bashrc函數。

+0

在最後一個管道中嘗試使用「xargs open」? – abasu 2013-05-09 18:08:36

+1

@abasu。那樣做了。您應該提交答案,以便我可以將其標記爲正確。如果你不這樣做,我會讓其他人看到如何去做。 – 2013-05-13 20:21:17

+0

謝謝:)我發佈了一個答案。 – abasu 2013-05-14 07:02:42

回答

2

find . -name "*.txt" | xargs grep -l "RANDOMSTRING" | xargs open

只保留open沒有工作,因爲該命令open期待的輸入是正確的格式,而不是從標準輸入管道到來。 xargs是從stdin逐行讀取並將其提供給open。對於一個旁註,xargs有時會遇到包含空格的文件名的問題。所以在找到時,最後使用-print0選項來處理這個問題。使用xargs進行示例查找可在man xargs