2012-08-22 68 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

我同意,只要单一路径有保证。不过,该解决方案应该可以使用多种路径。 –