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
N
lí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
), seP
alinea con el primer\n
carácter de línea ew (es decir, imprime la primera línea). LuegoD
elige hasta el primer\n
cará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
,D
ciclo si se agregal
antes y después de laN
que mirar el espacio de patrones:entonces, usando solo las últimas seis líneas de su ejemplo:
el último comando sale:
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),
RS
siendo la línea "eliminar" en sí (incluida su Trailing `\ n).La
!RT
prueba es necesaria para cuando la última línea no es unaRS
línea.RT
, un gawk-ism , es el texto real del registro actualRS
.gensub
Tambié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