LINUX.ORG.RU

Поиск текстовых блоков переменной длины в файле

 , ,


1

2

Добрый день! Имеется xml-файл с блоками данных. Каждый блок данных начинается/заканчивается одними и теми же тегами. Но количество строк в каждом блоке может быть разное.

Задача: как выбрать из текстового файла поочередно каждый блок данных по начальному/конечному тегу для дальнейшей обработки?

Условно считаем открывающийся тег в виде «<test_tag>», закрывающийся тег в виде «</test_tag>».

Заранее спасибо.

main() {
	while IFS='<' read -r -d '>' DOM_CONTENT DOM_ENTITY; do
		DOM_LOG="$DOM_LOG$DOM_CONTENT<$DOM_ENTITY>"
		if [ "${DOM_LOG##*</test_tag}" = ">" ]; then
			local DOM_SEARCH=${DOM_LOG%%<test_tag *}
			if [ ! "$DOM_SEARCH" = "$DOM_LOG" ]; then
				local tag="${DOM_LOG:${#DOM_SEARCH}}"
				local tag=${tag#*<test_tag }
				local tag=${tag%%>*}

				echo $tag
			fi
			unset DOM_LOG
		fi
	done
}

main "$@" < file.xml

выведет содержимое каждого test_tag. всё просто.

Spoofing ★★★★★ ()
Ответ на: комментарий от Spoofing

можно сразу ещё интерпретировать значения в переменные, сделать

eval local $tag

а если тебе нужно именно то что между тэгами, а не значения этого тэга, то бери сразу ${DOM_LOG:${#DOM_SEARCH}}, две следующих строки с local tag лишние.

Spoofing ★★★★★ ()
Ответ на: комментарий от Spoofing

Интересно стало, ты или sed не знаешь или что-то особое сказать хотел.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.