Input.txt:
8B0C
remove
8B0D
remove
8B0E
remove
8B0F
8B10
remove
8B14
remove
8B15
remove
8B16
remove
8B17
remove
8AC0
8AC1
remove
8AC2
remove
8AC3
remove
8AE4
8AE5
8AE6
remove
Salida deseada:
8B0F
8AC0
8AE4
8AE5
Quiero imprimir una línea si esa línea o la siguiente línea no contiene 'eliminar'. Estoy usando solaris 5.10, KSH.
text-processing
sed
awk
solaris
Ayrton Senna
fuente
fuente

Respuestas:
Con
sed: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 coincideremove. Si no lo hace (significa que ninguna de las dos líneas en el espacio del patrón contiene la cadenaremove), sePalinea con el primer\ncarácter de línea ew (es decir, imprime la primera línea). LuegoDelige 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 agregalantes y después de laNque mirar el espacio de patrones:entonces, usando solo las últimas seis líneas de su ejemplo:
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:
fuente
fuente
El método anterior no lee los registros línea por línea , sino que lee los registros de varias líneas de un separador de registros (RS) al siguiente (o al final del archivo),
RSsiendo la línea "eliminar" en sí (incluida su Trailing `\ n).La
!RTprueba es necesaria para cuando la última línea no es unaRSlínea.RT, un gawk-ism , es el texto real del registro actualRS.gensubTambién es un gawk-ismo .Si necesita verificar una línea de marcador que coincida con "eliminar" en cualquier parte de la línea, frente a una línea que equivale a "eliminar", simplemente cambie el Separador de registro a:
Salida:
fuente