将 grep / xargs 的结果放到单独的行上

Getting results of grep / xargs onto separate lines

我有一堆文件。我 grep 一个关键字,并将包含该关键字的文件名传递给 xmllint,后者对各种文件的 return 部分执行 XPath 表达式。

grep -irl "keyword" . | xargs xmllint --xpath '/HTML/BODY/P[2]' 

问题是有几个文件具有关键字,因此对各种 xmllint 执行有多个结果。我想在不同的行上查看每个 xpath 的结果。但是他们都合并到同一条线上了。

有什么建议吗?

您可以在 xargs 中使用 -n1 以确保一次只有 file is passed toxargs`:

grep -irl "keyword" . | xargs -n 1 xmllint --xpath '/HTML/BODY/P[2]' 

如果您想更好地控制 xargs 的输出,请使用带进程替换的 while 循环:

while read -r file; do
    echo "Processing $file =>"
    xmllint --xpath '/HTML/BODY/P[2]' "$file
    echo "==========================="
done < <(grep -irl "keyword" .) 

一个快速的解决方案是为此使用 for 循环:

for file in `grep irl "keyword" .`; do 
    xmllint --xpath '/HTML/BODY/P[2]' $file;
    echo;
done

---- 编辑 ----

根据您之前的评论,我假设 xmllint 不会输出换行符。将 echo 添加到循环体,这应该可以解决问题。