Я разрабатываю патч bash для выполнения нескольких операций с простыми текстовыми файлами, чтобы уменьшить количество ручных правок на нескольких веб-серверах. Одна часть, которая выходит за рамки моих знаний о sed, - это то, как я буду редактировать строку, которая встречается более одного раза, только редактируя одно из конкретных случаев. Возьмите следующий отредактированный HTML, например:
<div class="dashlet">
<div class="body">
<div class="detail-list-item">
<!-- some content here -->
</div>
<div class="detail-list-item">
<!-- some more content here -->
</div>
<div class="detail-list-item">
<!-- some more content here -->
</div>
<div class="detail-list-item">
<!-- some more content here -->
</div>
<div class="detail-list-item last-item">
<!-- some final content here -->
</div>
</div>
</div>
Мне нужно избавиться от последнего блока кода, и хотя это не идеально, учитывая, что этот файл может измениться в будущих обновлениях, я использую следующую команду для удаления содержимого по строкам
sed -i '29,33d' /path/to/file
Где 29 - строка, в которой включена <div class="detail-list-item last-item">
, а 33 - соответствующий закрывающий тег </div>
. Есть ли лучший способ сделать это, чтобы предотвратить будущие обновленные версии этого файла, чтобы мне не пришлось проверять файл, чтобы убедиться, что я не удаляю неправильные строки?
Последняя часть состоит в том, что мне нужно заменить предыдущий html-класс, чтобы включить last-item
в качестве второго класса. Таким образом, окончательный HTML будет выглядеть так:
<div class="dashlet">
<div class="body">
<div class="detail-list-item">
<!-- some content here -->
</div>
<div class="detail-list-item">
<!-- some more content here -->
</div>
<div class="detail-list-item">
<!-- some more content here -->
</div>
<div class="detail-list-item last-item">
<!-- some final content here -->
<!-- note how we are one div shorter and this div's class has a second class -->
</div>
</div>
</div>
Какие команды sed могут выполнить эту задачу?