2011-11-30 9 views
12

Ho il seguente comando: sed -i -e '/match1/,+2d' filex, che cancella 2 righe dopo aver trovato la corrispondenza "match1" nel file "file x". Voglio aggiungere diverse corrispondenze ad esso, come match1, match 2 ....Come posso usare "sed" per cancellare 2 righe dopo la partita/le partite?

Quindi eliminerà 2 righe dopo aver trovato una qualsiasi delle partite, come posso ottenere questo risultato?

+0

è possibile dato un esempio di input/output per rendere più chiaro ciò che ti aspetti? – sehe

+0

C'è qualcosa di sbagliato nel tuo caso con ovvio '/ match1 /, + 2d;/match2 /, + 2d'? Non riconoscerà le sovrapposizioni, ma nemmeno la tua espressione originale. – thiton

+0

Possibile duplicato di [sed o awk: cancella n linee seguendo un pattern] (https://stackoverflow.com/questions/4396974/sed-or-awk-delete-n-lines-following-a-pattern) –

risposta

20

Due modi, a seconda della versione di sed e la piattaforma:

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

o

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

grazie amico questo è proprio quello che voglio – wael

+3

perché allora questa non è una risposta accettata? – Drew

5

Non sei un utente sed, ma mi sembra che si potrebbe usare:

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

Altrimenti potresti, se è possibile per te, fare:

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

EDIT: Sembra che ho avuto l'idea giusta ma ho capito.

4

Se ho capito bene, si vuole

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

Ad esempio, creare Ingresso con seq 10 | sed '3i match1' > input.txt:

1 
2 
match1 
3 
4 
5 
6 
7 
8 
9 
10 

L'uscita del sed -e '/match1/,+2d' input.txt sarebbe:

1 
2 
5 
6 
7 
8 
9 
10 
Problemi correlati