Используйте синтаксический анализатор xml, например.xmlstarlet
:
xmlstarlet sel -t -m '//fields' -v 'fullName' -n file
Обратите внимание, что ваш файл xml
должен быть действительным, что не соответствует вашему примеру, так как у вас отсутствует корневой тег. Следующее будет работать с вышеуказанной командой:
ABC
false
TY
DEF
false
XY
Выход:
ABC
DEF
Благодаря комментарию @roaimas я создал цикл for
с результатами из xmlstarlet
, не зная количества полей:
numFields=$(xmlstarlet sel -t -m '//fields' -o "." file | wc -c)
for i in $(seq 1 $numFields); do
var=$(xmlstarlet sel -t -m "//fields[$i]" -v "fullName" file)
printf '%s\n' "$var" # or do something else
done