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

时间:2017-03-08 18:43:49

标签: bash xpath grep xargs xmllint

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

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

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

任何提示?

2 个答案:

答案 0 :(得分:1)

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

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" .) 

答案 1 :(得分:1)

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

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

----编辑----

我从您之前的评论中假设xmllint没有输出换行符。为循环体添加了回声,这应该可以解决问题。