Como sed a correspondência de padrões e parar após a última partida [closed]

0

Eu tenho um arquivo de log enorme que pode repetir valores repetidamente. Eu quero grep um conjunto como o Word A para o Word D, mas pare após uma partida. no abaixo, tudo começa de novo.

sed -n -e '/Word A/,/Word D/ p'

Como você pode fazê-lo parar depois de encontrar o primeiro "Word D"

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

Resultado esperado com sed -n -e '/ Word A /, / Word D / p'

Word A
Word B
Word C
Word D

Resultado real:

Word A
Word B
Word C
Word D
Word E -> should not exist
Word F -> should not exist
Word D -> should not exist
Word G -> should not exist
    
por rcmpayne 02.02.2017 / 19:19

3 respostas

1

Não é possível replicar com o GNU sed 4.2.2:

home:~/scratch/
$ sed -ne '/Word A/,/Word D/p' input
Word A
Word B
Word C
Word D
home:~/scratch/
$ cat input
Word A
Word B
Word C
Word D
Word E
Word F
Word D
Word G
    
por 02.02.2017 / 19:36
1

Eu não consigo reproduzir isso com o sed do OpenBSD nem com o GNU sed .

Se os dados tivessem sido

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

(observe a linha extra Word A )

$ sed -n -e '/Word A/,/Word D/p' data.in
Word A
Word B
Word C
Word D
Word A
Word D

Se você quisesse apenas o primeiro bit dessa saída:

$ sed -n -e '/Word A/,/Word D/p' -e '/Word D/q' data.in
Word A
Word B
Word C
Word D
    
por 02.02.2017 / 19:42
0

Descobri que meu problema estava com um caractere de escape incorreto. Obrigado pelas dicas todas

for /f "tokens=* " %%e in ('sed -n "/\/ios\/mdm2\/%Perimeter%.*DEBUG MDM payload/,/<\/plist>/p" %log%') do ( echo %%e > file.txt)
    
por 02.02.2017 / 23:27

Tags