Con sed:
sed '$!N;/remove/!P;D' infile
Esto tira de la Nlínea ext al espacio del patrón (si no está !en la $línea t) y verifica si el espacio del patrón coincide remove. Si no lo hace (significa que ninguna de las dos líneas en el espacio del patrón contiene la cadena remove), se Palinea con el primer \ncarácter de línea ew (es decir, imprime la primera línea). Luego Delige hasta el primer \ncarácter ewline y reinicia el ciclo. De esta manera, nunca hay más de dos líneas en el espacio del patrón.
Es probable que sea más fácil de entender el N, P, Dciclo si se agrega lantes y después de la Nque mirar el espacio de patrones:
sed 'l;$!N;l;/remove/!P;D' infile
entonces, usando solo las últimas seis líneas de su ejemplo:
8AC3
remove
8AE4
8AE5
8AE6
remove
el último comando sale:
8AC3 $
8AC3 \ n eliminar $
eliminar $
eliminar \ n 8AE4 $
8AE4 $
8AE4 \ n 8AE5 $
8AE4
8AE5 $
8AE5 \ n 8AE6 $
8AE5
8AE6 $
8AE6 \ n eliminar $
eliminar $
eliminar $
Aquí hay una breve explicación:
cmd salida 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)