¿Alguien puede decirme cómo imprimir líneas antes y después de un patrón en HP-UX (no Linux o Unix)?

Desafortunadamente, HP-UX no tiene GNU grep. Por lo tanto, no puede usar las opciones “-A / -B”. No hay una forma directa de darle la salida requerida. Puede usar sed / awk pero no están a la altura. Necesitará escribir un script bash / python / perl para hacer esto. Aquí hay un script perl (que tomé prestado de alguien):

#vi perlgrep.pl
#! / bin / perl -s -wln

nuestro ($ A, $ B, $ patrón);

EMPEZAR{
definido $ A o $ A = 0; definido $ B o $ B = 0; $ patrón definido o advierta “El patrón no existe, inserte amablemente el patrón $ !;” y salga 255;
}

$ FLINE {$.} = $ _;

/ $ patrón / y $ coincidencia = $. ;

FIN{

$ b = $ coincidencia – $ B;
$ a = $ coincidencia + $ A;

while ($ b <$ coincidencia) {
imprimir $ FLINE {$ b};
$ b ++;
}

print $ FLINE {$ partido};

while ($ a> $ match) {
print $ FLINE {++ $ match};

}
}

# chmod u + x perlgrep.pl
#perl perlgrep.pl -A = 2 -B = 4 -pattern = ‘nobody’ / etc / passwd
# #
# Consulte la página del comando man opendirectoryd (8) para obtener información adicional sobre
# Directorio abierto.
##
nobody: *: – 2: -2: Usuario sin privilegios: / var / empty: / usr / bin / false
root: *: 0: 0: Administrador del sistema: / var / root: / bin / sh
daemon: *: 1: 1: Servicios del sistema: / var / root: / usr / bin / false

Espero que esto ayude.

sed -n ‘/ start /, / end / p’

Esto imprimirá todas las líneas entre el texto “Inicio” y “Fin”. Muy útil si desea imprimir todas las líneas entre dos nodos en un xml.