Сценарий оболочки для поиска строки и вставки после 2 строк в xml - PullRequest
0 голосов
/ 06 февраля 2019

Невозможно получить точный вывод для XML

<String="12345">
<Bin>
<Value1 />
<Value2 />
</Bin>
</String>

Здесь нужно найти <String=12345>, затем вставить строку после <Bin> что-то похожее на ниже

<String="12345">
 <Bin>
 <ValueXxxx />
 <Value1 />
 <Value2 />
 </Bin>
 </String>

Заранее спасибо за вашу помощь.

1 Ответ

0 голосов
/ 07 февраля 2019

Хотя я не намерен побуждать людей анализировать или редактировать структурированные данные как xml, для этого конкретного случая будет работать следующее:

nl=$'\n'
nl="\\$nl"

sed '
:l
N
$!b l
s#\(<String="12345">\n[^\n]*\n\)#\1<ValueXxxx />'"$nl"'#
' input.xml

, что приводит к:

<String="12345">
<Bin>
<ValueXxxx />
<Value1 />
<Value2 />
</Bin>
</String>
  • Сначала он отбрасывает все строки в пространстве образца, чтобы разрешить сопоставление с несколькими строками.
  • регулярное выражение <String="12345">\n[^\n]*\n\ совпадает с указанной строкой, за которой следует произвольная строка.
  • Затем команда s вставляет строку <ValueXxxx /> и символ новой строки сразу после совпавших строк.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...