[РЕШЕНО] sed удалить первую встречную строку по маске (а остальные оставить)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

[РЕШЕНО] sed удалить первую встречную строку по маске

Сообщение SLEDopit »

Совсем в тупик зашел :(
Есть файл вида

Код: Выделить всё

some text
==first
==second
some text
==third
Никак не могу сообразить, как удалить строку с ==first. Достоверно известно, только то, что строка начинается с ==, номер строки неизвестен и все остальные строки, начинающиеся с ==, нужно оставить.
Если это имеет значение, то до и после данной операции еще куча других махинаций происходит.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: [РЕШЕНО] sed удалить первую встречную строку по маске

Сообщение Nazyvaemykh »

Что-то вроде этого:

sed '/==/ {$! N;D;:a;N;ba;}'
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: [РЕШЕНО] sed удалить первую встречную строку по маске

Сообщение Nazyvaemykh »

Исправляю ошибку (команда “D“ это немного другое):

sed '/==/ {$!N;s/[^\n]*\n//;:a;N;ba;}'
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: [РЕШЕНО] sed удалить первую встречную строку по маске

Сообщение SLEDopit »

Nazyvaemykh писал(а):
06.12.2010 00:35
sed '/==/ {$!N;s/[^\n]*\n//;:a;N;ba;}'
Спасибо, то что нужно.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: [РЕШЕНО] sed удалить первую встречную строку по маске

Сообщение Nazyvaemykh »

А вот GNU-вариант с диапазонами:

sed -n '/^==/,$ !p;0,/^==/ !p'
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали: