РЕДАКТИРОВАТЬ Этот билет НЕ предназначен для анализа XML. Пожалуйста, прочитайте вопрос, прежде чем прыгать на лошадей. Заранее спасибо.
Вызов curl отправляет мне обратно текст (в данном примере xml) в одну строку. Для удобства чтения я конвертирую его в оболочку для своих собственных целей, чтобы она разбивала строку в начале каждого узла:
cat xml | sed 's/</\n</g'
Работает довольно хорошо:
$ echo "<div><b>test</b><b>an other text</b></div>" | sed 's/</\n</g'
<div>
<b>test
</b>
<b>an other text
</b>
</div>
Однако яхотел бы разбить строку после >
и только в закрывающем теге. Я создал это sed
выражение, которое выглядит довольно неплохо:
$ echo "<div><b>test</b><b>an other text</b></div>" | sed -E 's/<\/(.?)>/<\/\1>\n/g'
<div><b>test</b>
<b>an other text</b>
</div>
однако оно не работает на этом:
$ echo "<file><atime>1559521691000</atime><id>CE0E7BAD4FD4409B2AFBC7895482C296896BF947</id><ctime>1470853372000</ctime><factor>290204195029359</factor></file>" | sed -E 's/<\/(.?)>/<\/\1>\n/g'
<file><atime>1559521691000</atime><id>CE0E7BAD4FD4409B2AFBC7895482C296896BF947</id><ctime>1470853372000</ctime><factor>290204195029359</factor></file>
Есть идеи почему?!
Я не вижу причин, по которым это может быть отклонено. Я не вижу никакой общей разницы между этим и предыдущим. Мне приятно слышать, что у sed
нет возможности сделать это, но я хотел бы знать, почему это работает для этого первого примера, а не для второго.
Любая хорошая душа, которая могла бы просветить меня? У меня есть своя собственная программа, которая делает это для меня, но я хочу выполнить эту команду на производственных серверах, где я могу писать только сценарии.