管道文件名从grep到head

时间:2012-08-22 12:53:39

标签: bash grep head

我正在重建已经损坏的数据库,并且这次重建的一部分涉及通过我编写的简单bash脚本使用grep来搜索长度大约四个字的字符串。这将返回一个文件路径,我想将其直接输入head,以便我可以查看grep找到的文件的前几行。

但是,在运行sh search2.sh "these are some search terms"时,正好只返回一个文件路径,运行sh search2.sh "these are some search terms" | head并不会在该文件上运行。我注意到grep返回的文件路径没有转义空格,但我不知道这对于head是否有问题。我接下来应该尝试什么想法?

2 个答案:

答案 0 :(得分:3)

试试这个:

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

这应该可以解决未加引号的空格的问题......

答案 1 :(得分:1)

将一些数据压入磁头将导致仅显示前几行数据。你要做的是调用head来显示找到的每个文件的开头。您可以通过将数据汇总到xargs来执行此操作,head将使用行作为命令行参数调用sh search2.sh "these are some search terms" | xargs head

-l

如果要处理路径中的空格,则必须告诉grep只返回文件名(-Z)和零分隔路径(-0),然后使用{{1} }打开xargs来解析零分隔路径,例如搜索包含" TEST"的文件从当前目录递归并在其上调用head

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