Saltar al contenido

Eliminar la línea que contiene cierta cadena y la siguiente línea

Solución:

Si tiene GNU sed (es decir, Linux o Cygwin no integrado):

sed '/bar/,+1 d'

Si usted tiene bar en dos líneas consecutivas, esto eliminará la segunda línea sin analizarla. Por ejemplo, si tiene un archivo de 3 líneas bar/bar/foo, los foo la línea se quedará.

Si bar puede ocurrir en líneas consecutivas, puede hacer:

awk '/bar/{n=2}; n {n--; next}; 1' < infile > outfile

que se puede adaptar para eliminar más de 2 líneas cambiando las 2 anteriores por el número de líneas a eliminar, incluida la correspondiente.

Si no, se hace fácilmente en sed con la solución de @MichaelRollins o:

sed '/bar/,/^/d' < infile > outfile

No hablo sed con fluidez, pero es fácil hacerlo en awk:

awk '/bar/{getline;next} 1' foo.txt 

El script awk dice: para una línea que contiene bar, obtenga la siguiente línea (getline), luego omita todo el procesamiento posterior (siguiente). El patrón 1 al final imprime las líneas restantes.

Actualizar

Como se señaló en el comentario, la solución anterior no funcionó con bar. Aquí hay una solución revisada, que la tiene en cuenta:

awk '/bar/ {while (/bar/ && getline>0) ; next} 1' foo.txt 

Ahora seguimos leyendo para omitir todas las líneas / bar /.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *