1

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

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

4

2 回答 2

3

试试这个:

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

这应该解决未引用空格的问题...

于 2012-08-22T12:56:35.990 回答
1

将一些数据导入 head 将导致仅显示前几行数据。你想要做的是调用 head 来显示找到的每个文件的开头。您可以通过管道将数据xargs调用到其中,并将head这些行作为其命令行参数进行调用:

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

如果要处理路径中的空格,则必须告诉 grep 仅返回文件名 ( -l) 和零分隔路径 ( -Z),然后使用-0xargs 上的开关解析零分隔路径,例如搜索包含 " TEST”从当前目录递归调用head它们:

grep -lZR "TEST" . | xargs -0 head
于 2012-08-22T12:57:19.080 回答