¿Cómo puedo leer un cierto número de líneas después de encontrar algún texto?
P.ej.:
Lea las siguientes 2 líneas después de encontrar "Unix" en:
Test 1
Test 2
Test 3
Test 4
UNIX
Test 5
Test 6
Test 7
Test 8
Test 9
El resultado puede ser:
Test 5
Test 6
Nota: El "Unix" en el último ejemplo es un argumento y, por lo tanto, puede ser cualquier otro texto.
Lo que tengo:
Todavía estoy sin ideas, solo necesito una luz. Pensando en crear otro script para hacer eso.

$signo al comienzo de mi respuesta es el símbolo del sistema, no parte delawkcomando.awk '/^UNIX$/ {s=NR;next} s && NR<=s+2'Una
grepsolución:Explicación:
-Asignifica: imprimir las dos líneas siguientes después del partidoO
awk:Explicación: Esa declaración busca UNIX en la línea (
$0=="UNIX"). Si se da eso, obtiene el siguiente siguiente en su búfer (getline) e imprime el búfer (print). Esto se hace dos veces.O use
sed:Explicación: Eso sella para UNIX (
/^UNIX$/). Si se encuentra esto, ejecuta la parte en el{...}.nsignifica siguiente,psignifica imprimir. Esto se hace dos veces también.fuente
getline; print;parte en elawkenunciado o lan;p;parte en elsedenunciado.grep -A100 -P '^UNIX$' file | tail -n +2. La parte de la cola es eliminar el primer gravamen. En los otros (sed, awk) tendrías que escribir bucles, lo que lo hace menos simple.La página de manual de grep describe la opción así:
fuente
UNIXen la salida.UNIX, tubería atail:[...] | tail -n +1o ased:[...] | sed '1d'.tailysed '1d'funcionan correctamente solo siUNIXaparece una sola vez en el texto de entrada. Todas las otras respuestas permiten múltiples ocurrencias. Podría ser mejor sugerir... | grep -v UNIX. Es cierto que esto se vuelve desordenado siUNIXaparece en las líneas 15 y 17.sedcon alguna forma desed '/UNIX/d;n;n;p/' /path/to/file, que acabo de descubrir y envié como respuesta.Esto parece hacer el truco muy bien:
Prueba de concepto:
fuente
forciclo no es necesaria.Puedes usar
ex:dónde:
1,/UNIX/d- elimina el texto después del partido%p- imprime el búferq!- Salga sin guardar los cambios en el archivo (usewqpara editar en el lugar)fuente