104 votes

Utilisation de sed pour supprimer toutes les lignes entre deux motifs correspondants

J'ai un fichier quelque chose comme :

 # ID 1
blah blah
blah blah
$ description 1
blah blah
# ID 2
blah
$ description 2
blah blah
blah blah

Comment puis-je utiliser une commande sed pour supprimer toutes les lignes entre les lignes # et $ ? Le résultat deviendra donc :

 # ID 1
$ description 1
blah blah
# ID 2
$ description 2
blah blah
blah blah

Pouvez-vous également s'il vous plaît donner une explication?

62voto

Lri Points 8342
$ cat test
1
start
2
end
3
$ sed -n '1,/start/p;/end/,$p' test
1
start
end
3
$ sed '/start/,/end/d' test
1
3

21voto

SLePort Points 11944

Une autre approche avec sed :

 sed '/^#/,/^\$/{//!d;};' file
  • /^#/,/^\$/ : de la ligne commençant par # jusqu'à la ligne suivante commençant par $
  • //!d : supprime toutes les lignes sauf celles correspondant aux modèles d'adresse

6voto

rmarimon Points 4021

J'ai fait quelque chose comme ça il y a longtemps et c'était quelque chose comme :

 sed -n -e "1,/# ID 1/ p" -e "/\$ description 1/,$ p"

Ce qui est quelque chose comme :

  • -n supprime toutes les sorties
  • -e "1,/# ID 1/ p" exécuter de la première ligne jusqu'à votre motif et p (imprimer)
  • -e "/\$ description 1/,$ p" s'exécute à partir du deuxième motif jusqu'à la fin et p (impression).

Je me trompe peut-être avec certains des échappements sur les cordes, alors veuillez vérifier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X