我有一堆文件。我grep一个关键字并将包含该关键字的文件名传递给xmllint,该xmllint执行XPath表达式以返回各种文件的一部分。
grep -irl "keyword" . | xargs xmllint --xpath '/HTML/BODY/P[2]'
问题是有几个文件有关键字,因此有几个结果到各种xmllint执行。我想在不同的行上看到每个xpath的结果。但它们都合并在同一条线上。
任何提示?
答案 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
没有输出换行符。为循环体添加了回声,这应该可以解决问题。