Получение результатов grep / xargs на отдельных строках
У меня есть куча файлов. Я использую ключевое слово grep и передаю имена файлов, которые содержат это ключевое слово, в xmllint, который выполняет выражение XPath для возврата части различных файлов.
grep -irl "keyword" . | xargs xmllint --xpath '/HTML/BODY/P[2]'
Проблема в том, что есть несколько файлов, которые имеют ключевое слово и, следовательно, несколько результатов для различных выполнений xmllint. Я хочу видеть результат каждого xpath в отдельной строке. Но все они объединены в одну линию.
Какие-нибудь советы?
2 ответа
Ты можешь использовать -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" .)
Одним из быстрых решений является использование цикла for для этого:
for file in `grep irl "keyword" .`; do
xmllint --xpath '/HTML/BODY/P[2]' $file;
echo;
done
---- РЕДАКТИРОВАТЬ ----
Я предполагаю из вашего предыдущего комментария, что xmllint
не выводит символ новой строки. В тело цикла добавлено эхо, которое должно решить проблему.