Я пытаюсь удалить диапазон, используя sed
. Диапазон от известного совпадения и следующих 2 строк. Допустим, я хочу удалить все строки, которые начинаются с Don't
, а затем 2 строки, которые следуют.
Обратите внимание, что я также делаю замены в командном файле sed. Поэтому я избегаю использования -n
и /p
в моем пространстве решений.
По какой-то причине я хочу ограничиться одним вызовом sed.
Вот мои данные (data.txt):
Print Me
Please Output This line
Don't Print Me and 2 more lines
This line is no good
So is this one
We should see this line
And this one, too.
Вот мой ожидаемый результат:
Print Me
Please Output This line
We should see this line
And this one, too.
Вот попытка пойти на это:
sed -f delete_dont_plus_2.sed data.txt
С этим как delete_dont_plus_2.sed
:
/^Don't/,+2d
Вот мой результат:
sed: 1: delete_dont_plus_2.sed: expected context address
Я также пробовал это:
/^Don't/,/^Don't/+2d
/^Don't/,{/^Don't/+2}d
Второй подход к этому вопросу:
Допустим, мы хотели сделать этот код немного более надежным. Сегодня есть еще 2 строки, которые необходимо удалить, но кто знает, сколько строк будет в будущем. Допустим, мы хотим удалить до, но не включая We should see this line
. В этом варианте вопроса результаты точно такие же. Опять же, давайте рассмотрим ограниченный BSD sed, поэтому мы не можем использовать выражение вроде /^Don't/,/^We should see this line/-1d
.
Спасибо!