Bash Scripting - Вывод текста внутри тегов

У меня есть файл, в который нужно поместить содержимое тегов. Например:

<Model500>
ABC
BCD 
CDE
</Model500>


<Model500>
123
234
345
</Model500>

Я хотел бы извлечь содержимое в

<Model500>
</Model500>

, используя sed

. Это будет выглядеть так, как

ABC
BCD
CDE

123
234
345

Я попытался это сделать, используя

sed -e 's/<Model>\,/</Model>/p' file.txt

Но специальные символы вызывают проблемы. Любой совет? Спасибо.

0
12.09.2016, 23:56
2 ответа

Если вводится XML, то лучше всего использовать специальный инструмент XML.

Метод 1

Одним из способов включения / в регулярное выражение sed является экранирование его обратной косой чертой:

$ sed -ne '/<Model500>/,/<\/Model500>/p' file.txt
<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

Выражение / /, / <\ / Model500> / определяет диапазон строк. Диапазон начинается со строки, соответствующей , и заканчивается строкой, соответствующей <\ / Model500> . Поскольку мы указываем диапазон, а не заменяющую команду, выражение не начинается с s .

Метод 2

Если вы не хотите его экранировать, вы можете использовать другой разделитель:

$ sed -ne '\|<Model500>|,\|</Model500>|p' file.txt
<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

Здесь мы использовали | в качестве разделителя. Чтобы сигнализировать, что в диапазоне используется разделитель, отличный от / , следует экранировать первый разделитель: \ | .

1
28.01.2020, 02:47

Поскольку строка содержит символ / , вам нужно либо экранировать его в выражении sed, либо использовать другой символ для ограничения выражения sed. К счастью, sed может использовать любой одиночный символ для ограничения выражения, поэтому вам просто нужно выбрать тот, который не появляется во входных данных.

В более общем плане sed, вероятно, не лучший выбор для данной задачи. Похоже, что вы анализируете XML-файл, поэтому вам, вероятно, следует использовать библиотеку, созданную для анализа XML, а не взламывать что-то вместе с sed. См. этот пост , чтобы узнать, почему это плохая идея.

0
28.01.2020, 02:47

Теги

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