Печать строк на две строки выше рисунка

2

Как я могу напечатать содержимое файла минус все, включая и ниже строки над первым появлением шаблона?

Скажите, что образец «^ предыдущий» в строке 15; тогда я хотел бы напечатать строки 1-13.

Toothrot
источник
в другом вопросе нет упоминания об исключении строки над матчем
Toothrot
Пожалуйста, приведите пример
Ройма
@roaima, пример чего? Я уже привел пример.
Зубной рот
Вы не привели пример. Вы сказали нам, что вы хотите. Пожалуйста, включите короткий пример файла, который содержит желаемый шаблон исключения, а затем покажите желаемый результат.
Ройма
1
@roaima, второй абзац является примером. если вы хотите другой пример, вы должны указать причину.
Toothrot

Ответы:

2

Как насчет поцелуй

sed '1,/^Previous/!d' file | head -n -2
steeldriver
источник
4

sed может сделать все это самостоятельно:

sed -n '$!N;/.*PATTERN.*/q;P;D' infile

Это очень просто: включите бесшумный режим, используйте скользящее окно (с помощью Nи D, чтобы всегда было две строки в пространстве шаблона), используйте qпри обнаружении PATTERNиного, Pнаберите первую строку в пространстве шаблона и перезапустите цикл.

С gnu sedним еще короче, поскольку он может Qработать без автопечати, поэтому вы можете пропустить беззвучный режим:

sed  '$!N;/.*PATTERN.*/Q;P;D' infile
don_crissti
источник