Linhas de impressão duas linhas acima do padrão

2

Como posso imprimir o conteúdo de um arquivo menos tudo, incluindo e abaixo da linha acima da primeira ocorrência de um padrão?

Digamos que o padrão seja "^ Previous" na linha 15; então eu gostaria de imprimir linhas 1-13.

    
por Toothrot 25.07.2018 / 21:08

2 respostas

2

Que tal o KISS

sed '1,/^Previous/!d' file | head -n -2
    
por 25.07.2018 / 21:13
4

sed pode fazer isso sozinho:

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

É muito simples: ative o modo silencioso, use uma janela deslizante (via N e D , para que sempre haja duas linhas no espaço padrão), q uit se encontrar PATTERN caso contrário P rint a primeira linha no espaço padrão e reinicie o ciclo.

Com gnu sed é ainda menor, pois pode Q uit sem impressão automática, pelo que pode ignorar o modo silencioso:

sed  '$!N;/.*PATTERN.*/Q;P;D' infile
    
por 25.07.2018 / 23:09