Apagar linha se o conteúdo estiver presente na próxima linha também

2

Eu tenho uma amostra:

This is a test
localhost% This is a test

O primeiro This is a test será exibido novamente em um arquivo txt da próxima linha que terá alguns caracteres localhost% antes dele. Gostaria de remover o primeiro This is a test se a próxima linha contiver algo como <arbitrary characters>% This is a test

Portanto, gostaria de verificar duas linhas e se a linha anterior This is a test corresponder na próxima linha localhost% This is a test (nota sobre % ), exclua a linha anterior.

Como eu poderia conseguir isso?

    
por Tuyen Pham 20.09.2018 / 11:19

2 respostas

3

Talvez:

sed '$!N;/^\(.*\)\n.*% $/!P;D'

Isso tem sed trabalho em um espaço padrão de 2 linhas usando N com D e remove a primeira linha (pule isso não ( ! ) P rinting) se for encontrado ( \(...\) capturado em ) no final ( $ ) da segunda linha após "% " .

Isso também deve funcionar para coisas como:

This is a test
foo% This is a test
bar% foo% This is a test

(remove as primeiras 2 linhas).

    
por 20.09.2018 / 15:42
1

Você pode usar o comando abaixo

sed -i "/This is a test/s/^This is a test$//g" test && sed -i '/^$/d' test

Arquivo de entrada

teste de gato

This is a test
localhost% This is a test

Após a execução do comando acima

arquivo de saída

teste de gato

localhost% This is a test
    
por 20.09.2018 / 12:26