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

sed -e '/PATTERN/r file' -e '$!N;P;D'

Не работает для PATTERN в последней строке.

С помощью GNU sed:

sed '/PATTERN/e cat file'
-2
13.09.2018, 18:06
2 ответа

Предполагая, что XML правильно сформирован и не содержит ошибок (, XML в вопросе содержит ошибки )и что Responseявляется корневым узлом документа, используя XMLStarlet:

$ xmlstarlet sel -t -c '/Response[ParticipantID="12346789"]' -nl file.xml
<Response>
            <MessageID>ID:c3e2</MessageID>
             <Year>2018</Year>
            <ClntID>ABC</ClntID>
            <ParticipantID>12346789</ParticipantID>
            <ProductType>RU</ProductType>
           <Date>19010101</Date>
          </Response>

Это вернет вам копию документа, если узел /Response/ParticipantIDимеет значение 12346789.

Запрос XPATH /Response[ParticipantID="12346789"]выберет узел Response, но только если его ParticipantIDимеет указанное значение. Флаг -cдля xmlstarletзапрашивает копию (, в отличие от -v, который возвращает значения ).

1
28.01.2020, 05:15

Так как вы специально просили sed, вот.

$ sed -n '/^<Response/{:a;N;/<\/Response>/!ba;/<ParticipantID>12346789/p}' inp
<Response
            <MessageID>ID:c3e2</MessageID>
             <Year>2018</Year>
            <ClntID>ABC</ClntID>
            <ParticipantID>12346789</ParticipantID>
            <ProductType>RU</ProductType>
           <Date>19010101<tDate>
          </Response>
$

Код, аналогичный sed -Печатать строки, соответствующие диапазону шаблонов, если одна строка соответствует условию от @John1024

2
28.01.2020, 05:15

Теги

Похожие вопросы