Comment supprimer plusieurs lignes par occurrence dans un fichier?


10

Disons que j'ai ce fichier de ligne 857835, contenant des trucs comme celui-ci:

a1
rubbish1
rubbish2
rubbish3
rubbish4
a1
rubbish5
rubbish6
rubbish7
rubbish8

Et je souhaite supprimer toutes les occurrences de a1et la ligne suivante ( rubbish1et rubbish5dans cet exemple). Comment fait-on ça?

J'ai essayé grep 'a1' -v -A1en vain et mes compétences en sed ne sont pas vraiment géniales:}

Mon Google-fu n'a pas pu m'aider cette fois, quelqu'un s'il vous plaît aidez-moi!

Réponses:


15

Essayer:

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

Cela signifie de / ^ a1 $ / à la ligne suivante, supprimez

Les ^ et $ vous assurent de faire correspondre la ligne entière, donc un a1 caché ne sera pas mis en correspondance.


6
Vous pourriez vouloir ^et $dans cette correspondance, forcer la correspondance de lignes entières.
Jander

@Jander: Bien sûr, corrigé
asoundmove

12

Ce qui suit fonctionnera sur non-GNU sed(la ,+1syntaxe d'adresse est une extension GNU):

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

"En commençant à une ligne qui lit exactement 'a1' et en se terminant à la ligne suivante pour laquelle le début de la ligne existe (c'est-à-dire la ligne suivante), supprimez."

C'est beaucoup moins extensible que la réponse de @ asoundmove, car la suppression d'un nombre différent de lignes nécessiterait un script entièrement différent.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.