простая команда для удаления заголовка и нижнего колонтитула из файла

Мне нужна простая небольшая команда, чтобы удалить XML-заголовок и нижний колонтитул из файла:

<?xml version="1.0" encoding="UTF-8"?> <conxml> <MsgPain001> <HashValue>A9C72997C702A2F841B0EEEC3BD274DE1CB7BEA4B813E030D068CB853BCFECA6</HashValue> <HashAlgorithm>SHA256</HashAlgorithm> <Document> ... </Document> <Document> ... </Document> </MsgPain001> </conxml> 

Должна стать просто

 <Document> ... </Document> <Document> ... </Document> 

(обратите внимание на отступы, отступ от первого тега документа должен быть удален.

Это звучит как (жадное) регулярное выражение

 <Document>.*</Document> 

Но я не получаю это из-за строк.

Может ли кто-нибудь предоставить простой сценарий sed или аналогичный, чтобы получить его?

Мне нужно это в трубе, чтобы вычислить хэш над содержащимися документами.

  • Как удалить текст, сопоставляющий определенные шаблоны из файла
  • Сопоставление и удаление строк с ~ 100 строк
  • Исключение одиночных кавычек ** с ** псевдонимом
  • Замените строку, включая косую черту «/», используя команду sed
  • Как удалить символ новой строки из строк, предшествующих определенному шаблону?
  • Обработка управляющих символов
  • Как использовать sed или awk для получения только каталога
  • Сопоставьте шаблон и замените первый экземпляр строки после нее
  • 2 Solutions collect form web for “простая команда для удаления заголовка и нижнего колонтитула из файла”

    Использование sed :

      sed -n '/<Document>/,/<\/Document>/ p' yourfile.xml 

    Объяснение:

    • -n делает sed тихим, то есть он не выводит все содержимое файла,
    • /pattern/ ищет строки, включая указанный шаблон,
    • a , b (запятая) сообщает sed выполнить действие на строках от a до b (где a и b определяются путем сопоставления вышеупомянутых шаблонов),
    • p означает печать и действие, выполняемое на линиях, соответствующих указанным выше.

    Изменить: если вы хотите дополнительно отформатировать пробел перед <Document> , это можно сделать следующим образом:

      sed -ne '/ <Document>/s/^ *//' -e '/<Document>/,/<\/Document>/ p' yourfile.xml 

    Чтобы предотвратить разделение текста между </Document> и следующим <Document> вам, возможно, придется использовать серию sed команд (см. Комментарий Gilles выше).

    По сути sed считывает весь файл в буфер хранения (так что содержимое файла можно рассматривать как одну строку) и маркирует первый и последний теги Document для дальнейшей обработки.

     # version 1 # marker: HERE cat file.xml | sed -n '1h;1!H;${;g;s/\(<Document>.*<\/Document>\)/HERE\1HERE/g;p;}' | sed -n -e '/HERE<Document>/,/<\/Document>HERE/ p' | sed -e 's/^ *HERE\(<Document>\)/\1/' -e 's/\(<\/Document>\)HERE *$/\1/' # version 2 (using the Bash shell) # marker: $'\001' cat file.xml | sed -n $'1h;1!H;${;g;s/\\(<Document>.*<\\/Document>\\)/\001\\1\001/g;p;}' | sed -n -e $'/\001<Document>/,/<\\/Document>\001/ p' | sed -e $'s/^ *\001//' -e $'s/\001 *$//' | cat -vet 

    … но я думаю, все это можно было бы сделать более элегантно (и надежно) с помощью xmlstarlet !

    Interesting Posts

    Как убедиться, что дочерний процесс задания супервизора умирает, когда я убиваю супервизора

    Почему имена в файле «/ etc / HOSTNAME» отличаются от имени и имени хоста в SLES11SP3?

    Отображает ли `sl` текущий каталог?

    UNZIP не удалось при извлечении

    Как мне получить ~ / .bashrc для выполнения всех скриптов в каталоге ~ / Shell с помощью цикла?

    Shell command / script, чтобы узнать, жив ли хост?

    Совместное использование соединений socks5 со второй системой сетевого адаптера

    Создание слайд-шоу под Linux

    Arch не распознает GPT-диск

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

    Есть ли исходные репозитории APT для Debian Lenny?

    Сопоставьте символ с определенным ключом

    FreeBSD: смешивание пакетов и портов?

    Почему задачи CRONTAB теряются при выходе из сеанса Putty?

    Как определить, не удалось ли ssh выполнить удаленную команду из-за изменения идентификатора хоста?

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