Después de consultar con expertos en el tema, programadores de diversas ramas y profesores hemos dado con la solución a la pregunta y la dejamos plasmada en esta publicación.
Solución:
Voy a intentarlo.
Para eliminar 5 líneas después de un patrón (incluida la línea con el patrón):
sed -e '/pattern/,+5d' file.txt
Para borrar 5 líneas después de un patrón (excluyendo la línea con el patrón):
sed -e '/pattern/n;N;N;N;N;d' file.txt
Sin extensiones GNU (por ejemplo, en macOS):
Para eliminar 5 líneas después de un patrón (incluida la línea con el patrón)
sed -e '/pattern/N;N;N;N;d;'
Agregar -i ''
para editar en el lugar.
Sencillo awk
soluciones:
Suponga que la expresión regular a usar para encontrar líneas coincidentes se almacena en la variable de shell $regex
y el conteo de líneas para saltar $count
.
Si el línea coincidente debe además ser salteado ($count + 1
se saltan líneas):
... | awk -v regex="$regex" -v count="$count"
'$0 ~ regex skip=count; next --skip >= 0 next 1'
Si el línea coincidente debe no ser salteado ($count
líneas después el partido se salta):
... | awk -v regex="$regex" -v count="$count"
'$0 ~ regex skip=count; print; next --skip >= 0 next 1'
Explicación:
-v regex="$regex" -v count="$count"
defineawk
variables basadas en cascarón variables del mismo nombre.$0 ~ regex
coincide con la línea de interésskip=count; next
inicializa el conteo de saltos y pasa a la siguiente línea, omitiendo efectivamente la línea coincidente; en la segunda solución, elprint
antes denext
asegura que es no saltado--skip >= 0
disminuye el conteo de saltos y toma medidas si (todavía) es >= 0, lo que implica que la línea en cuestión debe omitirse.next
pasa a la siguiente línea, omitiendo efectivamente la línea actual
1
es una abreviatura de uso común paraprint
; es decir, la línea actual simplemente se imprime- Solo las líneas que no coinciden y que no se saltan llegan a este comando.
- La razón que
1
es equivalente aprint
es eso1
se interpreta como un patrón booleano que, por definición, siempre se evalúa como true, lo que significa que su acción asociada (bloque) se ejecuta incondicionalmente. ya que hay no acción asociada en este caso,awk
por defecto a impresión la línea.
Sección de Reseñas y Valoraciones
Finalizando este artículo puedes encontrar las críticas de otros programadores, tú también tienes la libertad de mostrar el tuyo si lo crees conveniente.