2012-08-22 71 views
0

我正在重建已損壞的數據庫的過程中,這部分重建涉及使用grep通過一個簡單的bash腳本我寫了搜索一個約四個字的字符串在長度。這會返回一個文件路徑,我想直接將它傳入頭部,以便查看grep找到的文件的前幾行。從grep管道的文件名到頭

但是,在運行sh search2.sh "these are some search terms"時只返回一個文件路徑,運行sh search2.sh "these are some search terms" | head不會在該文件上運行。我注意到,grep返回的文件路徑不能轉義空格,但我不知道這是否會成爲head的問題。任何想法,我應該嘗試下一步?

回答

2

試試這個:

head "$(search2.sh 'these are some search terms')" 

這應該解決的問題有不帶引號的空白......

1

管道一些數據頭會造成只有數據的前幾行顯示。你想要做的是調用head來顯示每個找到的文件的開始。您可以通過數據管道到xargs它將調用head與行作爲其命令行參數,這樣做的:

sh search2.sh "these are some search terms" | xargs head 

如果你要處理的空間在你的路,你將不得不告訴grep來只返回文件名(-l)和零分隔的路徑(-Z),然後使用xargs上的-0開關來解析零分隔的路徑,例如搜索包含文件從當前目錄「TEST」遞歸,並呼籲他們head

grep -lZR "TEST" . | xargs -0 head 
+0

'xargs'是矯枉過正,如果'search2.sh'保證(儘管也許不是)返回的單一路徑。 – chepner

+0

我同意,只要單一路徑有保證。不過,該解決方案應該可以使用多種路徑。 –