将 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 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" .)
一个快速的解决方案是为此使用 for 循环:
for file in `grep irl "keyword" .`; do
xmllint --xpath '/HTML/BODY/P[2]' $file;
echo;
done
---- 编辑 ----
根据您之前的评论,我假设 xmllint
不会输出换行符。将 echo 添加到循环体,这应该可以解决问题。
我有一堆文件。我 grep 一个关键字,并将包含该关键字的文件名传递给 xmllint,后者对各种文件的 return 部分执行 XPath 表达式。
grep -irl "keyword" . | xargs xmllint --xpath '/HTML/BODY/P[2]'
问题是有几个文件具有关键字,因此对各种 xmllint 执行有多个结果。我想在不同的行上查看每个 xpath 的结果。但是他们都合并到同一条线上了。
有什么建议吗?
您可以在 xargs
中使用 -n1
以确保一次只有 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" .)
一个快速的解决方案是为此使用 for 循环:
for file in `grep irl "keyword" .`; do
xmllint --xpath '/HTML/BODY/P[2]' $file;
echo;
done
---- 编辑 ----
根据您之前的评论,我假设 xmllint
不会输出换行符。将 echo 添加到循环体,这应该可以解决问题。