Com sed:
sed '$!N;/remove/!P;D' infile
Isso puxa a Nlinha ext para o espaço do padrão (se não estiver !na $linha t) e verifica se o espaço do padrão corresponde remove. Se não existir (significa que nenhuma das duas linhas no espaço do padrão contém a sequência remove), ela Pcria o primeiro \ncaractere de linha de linha (ou seja, imprime a primeira linha). Em seguida, Delimina o primeiro \ncaractere de linha de linha e reinicia o ciclo. Dessa forma, nunca há mais de duas linhas no espaço do padrão.
É provavelmente mais fácil de entender o N, P, Dciclo se você adicionar lantes e após a Nolhar para o espaço padrão:
sed 'l;$!N;l;/remove/!P;D' infile
portanto, usando apenas as últimas seis linhas do seu exemplo:
8AC3
remove
8AE4
8AE5
8AE6
remove
o último comando gera:
8AC3 $
8AC3 \ n remover $
remove $
remover \ n 8AE4 $
8AE4 $
8AE4 \ n 8AE5 $
8AE4
8AE5 $
8AE5 \ n 8AE6 $
8AE5
8AE6 $
8AE6 \ n remover $
remove $
remove $
Aqui está uma breve explicação:
cmd saída cmd
l 8AC3$ N # read in the next line
l 8AC3\n remove$ D # delete up to \n (pattern space matches so no P)
l remove$ N # read in the next line
l remove\n 8AE4$ D # delete up to \n (pattern space matches so no P)
l 8AE4$ N # read in the next line
l 8AE4\n 8AE5$ # pattern space doesn't match so print up to \n
P 8AE4 D # delete up to \n
l 8AE5$ N # read in the next line
l 8AE5\n 8AE6$ # pattern space doesn't match so print up to \n
P 8AE5 D # delete up to \n
l 8AE6$ N # read in the next line
l 8AE6\n remove$ D # delete up to \n (pattern space matches so no P)
l remove$ # last line so no N
l remove$ D # delete (pattern space matches so no P)