Имейте большой документ HTML
, где термин «BEGIN
» и «END
» повторяются по всему документу. Например, BEGIN - <script>
, а END - </script>
. Для каждого экземпляра шаблона в документе есть переменное количество строк между шаблоном (между <script>
и </script>
).Как удалить строки между рисунком при повторении рисунка
Пытался следующее sed
:
sed '/\<script>/,/\<\/script>/d'
Этой sed
строки удаляет все между первым вхождением <script>
и появлением </script>
в прошлом.
попытался также:
awk '/\<script>/,/\<\/script>/d'
Эта awk
строка удаляет все содержимое между рисунком, но, в отличие от SED строки, сохраняет каждое вхождение шаблона, как это:
<script>
</script>
В целом, я может получить вариант того, что я хочу (или его противоположность).
- СЭД удаляет текст между (один экземпляр) шаблон
- AWK поддерживает все вхождения шаблона, но удаляет содержимое между узором, а также содержание до и после образца.
Мой вопрос: с помощью патч в или AWK (и/или любой другой утилиты GNU), как удалить содержимое между шаблоном, когда термины для определения (информация с BEGIN
термин и END
термин) встречаются несколько раз в документе?
'\ <' соответствует пустой строке в начале слова. Нет необходимости скрывать символ '<' в sed. – potong
Никогда не используйте выражения диапазона, поскольку они делают тривиальные задания очень незначительными, но затем требуют полного переписывания и/или дублирования условий, когда проблема становится еще немного интереснее. Всегда используйте флаги, например. 'awk '/ start/{f = 1} f;/end/{f = 0} 'file' –