Как извлечь и напечатать значения из XML-файла между кавычками » «?

Как корректно извлечь данные из XML файла с помощью командной строки

Работа с XML файлами может быть сложной задачей, особенно если необходимо извлечь определённые значения и форматировать их для дальнейшего использования. В данной статье мы рассмотрим, как правильно использовать командную строку для извлечения данных из файла XML, а также устранять распространенные проблемы, такие как лишние символы новой строки.

Извлечение значений с помощью grep и awk

Предположим, у вас есть файл web.config.txt, из которого нужно извлечь значение WorkstationID. Для этого можно использовать следующую комбинацию команд:

grep -Po '<add key="WorkstationID" value="\K[^"]+' web.config.txt | awk '{print "MapOPIWs = 200000" $0}' >> fipayeps_def.cfg && echo '"' >> fipayeps_def.cfg

Эта команда ищет нужное значение и добавляет строку в файл fipayeps_def.cfg. Однако, часто данной командой добавляется лишняя новая строка в конце. Вот как это можно исправить.

Устранение проблемы с новой строкой

Ваша команда может вернуть следующий результат:

MapOPIWs = "000001769
"

Чтобы избавиться от лишней новой строки, можно использовать команду tr:

grep ... | tr -d '\n' >> fipayeps_def.cfg

Либо можно сохранить вывод в переменной, чтобы удалить конечный символ новой строки автоматически:

var=$(grep ...)
echo "MapOPIWs = \"$var\"" >> fipayeps_def.cfg

Использование XML парсера

Хотя grep и awk могут помочь в извлечении данных, для XML формата лучше использовать специализированные инструменты. Один из таких инструментов — это xmlstarlet. С его помощью можно извлечь нужные данные более эффективно:

xmlstarlet sel -t -v '//add[@key="WorkstationID"]/@value' < web.config.txt

Затем результат можно сохранить в переменной и добавить в файл:

var=$(xmlstarlet sel...)
echo "MapOPIWs = \"$var\"" >> fipayeps_def.cfg

Perl как альтернатива

Если вы предпочитаете использовать регулярные выражения, то Perl может оказаться более удобным инструментом, чем grep, особенно для работы с форматом XML:

perl -ne 'print "MapOPIWs = \"$1\"" while /<add key="WorkstationID" value="([^"]+)/g' web.config.txt >> fipayeps_def.cfg

Используя группировку захвата, вы можете извлечь данные и отформатировать их по желаемому шаблону.

Заключение

Работа с XML файлами может представлять собой сложную задачу, однако с правильными инструментами и командами можно значительно упростить этот процесс. Использование xmlstarlet и Perl вместо стандартных текстовых обработчиков обеспечит верный и аккуратный результат. Не забывайте об очистке данных от лишних символов, чтобы избежать проблем с форматом выходного файла.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *