Como mostrar as linhas após cada correspondência do grep até outra correspondência específica?

37

Eu sei que, usando a opção "-A NUM" , posso imprimir um número específico de linhas finais após cada correspondência. Só estou querendo saber se é possível imprimir linhas à direita até que uma palavra específica seja encontrada após cada partida. por exemplo. Quando eu procuro por "Word A" eu quero ver a linha contendo "Word A" e também as linhas depois dela até a que contém "Word D".

contexto:

Word A
Word B
Word C
Word D
Word E
Word F

comando:

grep -A10 'Word A'

Eu preciso dessa saída:

Word A
Word B
Word C
Word D
    
por Meysam 20.09.2011 / 07:48

3 respostas

61

Parece que você deseja imprimir linhas entre ' Word A ' e ' Word D ' (inclusive). Eu sugiro que você use sed em vez de grep . Ele permite que você edite um intervalo de fluxo de entrada que inicia e termina com os padrões desejados. Você deve apenas informar sed para imprimir todas as linhas no intervalo e nenhuma outra linha:

sed -n -e '/Word A/,/Word D/ p' file
    
por 20.09.2011 / 08:24
13

por que não usar o awk?

awk '/Word A/,/Word D/' filename
    
por 02.07.2013 / 05:19
7
perl -lne 'print if /Word A/ .. /Word D/' file

ou

cat file | perl -lne 'print if /Word A/ .. /Word D/'
    
por 02.07.2013 / 04:02

Tags