2011-11-30 10 views
12

Tengo el siguiente comando: sed -i -e '/match1/,+2d' filex, que elimina 2 líneas después de encontrar la coincidencia "match1" en el archivo "archivo x". Quiero añadir varios partidos a la misma, al igual que match1, partido 2 ....¿Cómo puedo usar "sed" para borrar 2 líneas después del partido/partidos?

por lo que eliminar 2 líneas después de encontrar alguno de los partidos, ¿cómo puedo lograr esto?

+0

se le ha dado un ejemplo de entrada/salida para que quede más claro de lo que esperabas? – sehe

+0

¿Hay algo incorrecto en su caso con el obvio '/ match1 /, + 2d;/match2 /, + 2d'? No reconocerá superposiciones, pero tampoco su expresión original. – thiton

+0

duplicado Posible de [sed o awk: n líneas eliminar siguiendo un patrón] (https://stackoverflow.com/questions/4396974/sed-or-awk-delete-n-lines-following-a-pattern) –

Respuesta

20

dos maneras, dependiendo de la versión de sed y de la plataforma:

sed -e '/match1/,+2d' -e '/match2/,+2d' <oldfile> newfile 

o

sed -e '/match1\|match2/,+2d' <oldfile> newfile 
+0

gracias, hombre esto es lo que quiero – wael

+3

¿por qué entonces esto no es una respuesta aceptada? – Drew

5
No

un usuario SED, pero me parece que podría utilizar:

sed -i -e '/(match1|match2)/,+2d' filex 

De lo contrario, podría, si eso es posible para usted, hacer:

sed -i -e '/match1/,+2d' filex && sed -i -e '/match2/,+2d' filex 

EDIT: Parece que tenía la idea correcta, pero ziu tengo.

4

Si he entendido bien, que desea

sed -e '/match1/,+2d' input.txt 

Por ejemplo, cree la entrada con seq 10 | sed '3i match1' > input.txt:

1 
2 
match1 
3 
4 
5 
6 
7 
8 
9 
10 

La salida de sed -e '/match1/,+2d' input.txt sería:

1 
2 
5 
6 
7 
8 
9 
10 
Cuestiones relacionadas