Как корректно извлечь данные из 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
вместо стандартных текстовых обработчиков обеспечит верный и аккуратный результат. Не забывайте об очистке данных от лишних символов, чтобы избежать проблем с форматом выходного файла.