¿Cómo eliminar varias líneas por aparición en un archivo?


10

Digamos que tengo este archivo de línea 857835, que contiene cosas como esta:

a1
rubbish1
rubbish2
rubbish3
rubbish4
a1
rubbish5
rubbish6
rubbish7
rubbish8

Y deseo eliminar todas las ocurrencias de a1y la siguiente línea ( rubbish1y rubbish5en este ejemplo). ¿Cómo lo hago?

He intentado grep 'a1' -v -A1en vano, y mis habilidades de sed no son realmente geniales:}

Mi Google-fu no ha podido ayudarme esta vez, ¡alguien por favor ayuda!

Respuestas:


15

Tratar:

sed -e '/^a1$/,+1d' "filename"

Esto significa desde / ^ a1 $ / hasta la siguiente línea, eliminar

^ Y $ aseguran que coincida con toda la línea, por lo que un a1 oculto no coincidirá.


66
Es posible que desee ^y $en esa coincidencia, forzar la coincidencia de líneas enteras.
Jander

@Jander: Claro, corregido
asoundmove

12

Lo siguiente funcionará en no GNU sed(la ,+1sintaxis de la dirección es una extensión GNU):

sed -e '/^a1$/,/^/d' my_file >my_filtered_file

"Comenzando en una línea que lee exactamente 'a1', y terminando en la siguiente línea para la cual existe el comienzo de la línea (es decir, la siguiente línea), elimine".

Sin embargo, es mucho menos extensible que la respuesta de @ asoundmove, ya que eliminar un número diferente de líneas tomaría un script completamente diferente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.