我正在重建已经损坏的数据库,并且这次重建的一部分涉及通过我编写的简单bash脚本使用grep来搜索长度大约四个字的字符串。这将返回一个文件路径,我想将其直接输入head,以便我可以查看grep找到的文件的前几行。
但是,在运行sh search2.sh "these are some search terms"
时,正好只返回一个文件路径,运行sh search2.sh "these are some search terms" | head
并不会在该文件上运行。我注意到grep返回的文件路径没有转义空格,但我不知道这对于head是否有问题。我接下来应该尝试什么想法?
答案 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