Найти шаблон в XML с помощью команды unix

У меня есть XML, как показано ниже.

<a> </a> <a> <b></b> <c></c> </a> 

Мне нужно найти номера строк пустых тегов, которые находятся в двух последовательных строках без каких-либо меток между ними, как показано ниже.

  <a> </a> Output: 1 -> line number 

Я использую PCGREP, но мои администраторы unix ограничили или не поддерживали команды perl, поэтому это может быть достигнуто с помощью SED или AWK? Примечание: xmlstarlet также не поддерживается.

One Solution collect form web for “Найти шаблон в XML с помощью команды unix”

Sed раствор

 #!/bin/bash sed -nr ' /^<[^<]*>$/ { N /^<([^<]*)>\n<\/\1>$/= } ' "$1" | awk '{print "Output: "$NF - 1" -> line number"}' 

Объяснение:

  1. sed
    • /^<[^<]*>$/ если у нас есть один открытый тег в строке
    • N – добавьте следующую строку ввода в пространство шаблонов.
    • /^<([^<]*)>\n<\/\1>$/ и проверить, имеет ли следующая строка эквивалентный закрытый тег.
    • если это так, напечатайте этот номер строки командой = . Имейте в виду, что это номер строки закрытого тега. Мы должны уменьшить его на один.
  2. awk – уменьшает номер строки и печатает ее в строке сообщения.

Тестирование:

вход

 <a> </a> <a> <b></b> <c></c> <c> </c> </a> 

Вывод

 ./empty_tag.sh input.txt Output: 1 -> line number Output: 6 -> line number 

Решение AWK

Использование: ./empty_tag.sh input.txt

 #!/bin/bash awk -F'[>/]' ' line_num { if(NF == 3) {print "Output: " line_num " -> line number";} line_num = 0; } NF == 2 {line_num = NR;} ' "$1" 
  • Заменить текст с помощью sed и сохранить часть исходного текста
  • Эффективное извлечение данных из нескольких файлов в один файл CSV
  • Сценарий оболочки или команда для вырезания текста и двоичных файлов выдержки из больших файлов журнала
  • поиск и замена строки
  • Как добавить строку из списка в другой файл, когда указанная строка найдена?
  • Выход Grep между узлами XML «Шаблон в наборе основных узлов»
  • Как декодировать текст base64 в xml-файле в Linux?
  • Как получить определенную строку в xml с помощью python или perl и т. Д.
  • Как изменить значения в файле XML
  • Shell Script для извлечения значения тега
  • Разделить XML-файл на несколько файлов
  • Удалить узел XML, содержащий определенный элемент
  • Interesting Posts

    Как заставить sed выполнять действия только в первом матче?

    Автоматическая блокировка, но не затемнение оболочки gnome при неактивном

    Linux Cgroup для управления файлами, работающими на процессоре, но не подсистемой устройства?

    Нажимать одну и ту же конфигурацию веб-сервера на несколько передних концов

    начало службы: HOSTNAME: команда не найдена

    Предоставление временной метки для каждой строки вывода из команды

    как определить, что DISPLAY активен / имеет фокус ввода?

    Объясните, какая команда выводится во втором столбце

    Есть ли способ общаться с кем-то на рабочем столе?

    Мобильная широкополосная связь многократно подключается / отключается

    Утерянные учетные данные для виртуальной машины Linux

    Передача параметра в dstat-плагин

    Bash: при чтении строки "или каждые 60 секунд"

    Как обновить libnl в Fedora?

    Моя графическая карта не распознается на ноутбуке / debian

    Linux и Unix - лучшая ОС в мире.