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 /.