OVH Cloud OVH Cloud

Supprimer block de lignes avec vi et vim

8 réponses
Avatar
Leroux Philippe
Bonjour,

Je voudrais supprimer 'un block de lignes' dans une fichier via vi et
vim mais
je n'y arrive pas.
Imaginons le fichier suivant

Ligne1
Ligne2
WORD_X
....
....
....
WORD_Y
LigneXYZ
LiegnXYZ+1
WORD_X
....
....
....
WORD_Y
....

Les blocks sont répétés n fois et sont délimités par WORD_X et WORD_Y.
Comment faire pour supprimer les lignes comprises entre les blocks,
délimiteurs de blocks inclues ?

Si ce n'est pas possible je suis preneur pour un outil courant sur
unix et cygwin.

Merci.

8 réponses

Avatar
Jean-Yves LENHOF
On Fri, 30 Jan 2004 21:44:23 +0100, Leroux Philippe wrote:

Bonjour,

Je voudrais supprimer 'un block de lignes' dans une fichier via vi et
vim mais
je n'y arrive pas.
Imaginons le fichier suivant

Ligne1
Ligne2
WORD_X
....
....
....
WORD_Y
LigneXYZ
LiegnXYZ+1
WORD_X
....
....
....
WORD_Y
....

Les blocks sont répétés n fois et sont délimités par WORD_X et WORD_Y.
Comment faire pour supprimer les lignes comprises entre les blocks,
délimiteurs de blocks inclues ?

Si ce n'est pas possible je suis preneur pour un outil courant sur
unix et cygwin.

Merci.


Un truc du genre ?

www:/var/log/apache# cat titi.txt
mot1
mot2
mot3
mot4
mot5
mot9
mot2
mot6
mot7
mot5
www:/var/log/apache# sed -e '/mot2/,/mot5/d' titi.txt
mot1
mot9
www:/var/log/apache#


Jean-Yves LENHOF

Avatar
no
On Fri, 30 Jan 2004 21:44:23 +0100, Leroux Philippe wrote:


Je voudrais supprimer 'un block de lignes' dans une fichier via vi et
vim mais
je n'y arrive pas.
Imaginons le fichier suivant

Ligne1
Ligne2
WORD_X
....
....
....
WORD_Y
LigneXYZ
LiegnXYZ+1
WORD_X
....
....
....
WORD_Y
....

Les blocks sont répétés n fois et sont délimités par WORD_X et WORD_Y.
Comment faire pour supprimer les lignes comprises entre les blocks,
délimiteurs de blocks inclues ?

Si ce n'est pas possible je suis preneur pour un outil courant sur
unix et cygwin.

Merci.


Pour supprimer le block delimité par WORD_X et WORD_Y tu peux utiliser
cette commande avec Vim :

:%s/^WORD_Xn_.{-}WORD_Y(n|$)//g

Résultat :

Ligne1
Ligne2
LigneXYZ
LiegnXYZ+1
....

Avatar
Leroux Philippe
[...]
Pour supprimer le block delimité par WORD_X et WORD_Y tu peux utiliser
cette commande avec Vim :

:%s/^WORD_Xn_.{-}WORD_Y(n|$)//g

Résultat :

Ligne1
Ligne2
LigneXYZ
LiegnXYZ+1
....




Génial !

Merci.

Avatar
thomas.baruchel
Je voudrais supprimer 'un block de lignes' dans une fichier via vi et


si tu rencontres fréquemment ce genre de besoin, il se peut que
l'éditeur sam t'intéresse, car il gère les expressions régulières
sur plusieurs lignes (je crois que c'est le seul, mais quelqu'un
peut-il confirmer ?), donc ce que tu appelles un bloc de lignes
n'est à ses yeux qu'une expression régulière classique. Cela dit,
je ne l'utilise pas et ne peux t'en dire plus.

--
« nous devons agir comme si la chose qui peut-être ne sera pas devait
être » (Kant, Métaphysique des moeurs, doctrine du droit, II conclusion)

Thomas Baruchel

Avatar
Stephane Chazelas
2004-02-04, 10:16(+00), Thomas Baruchel:
Je voudrais supprimer 'un block de lignes' dans une fichier via vi et


si tu rencontres fréquemment ce genre de besoin, il se peut que
l'éditeur sam t'intéresse, car il gère les expressions régulières
sur plusieurs lignes (je crois que c'est le seul, mais quelqu'un
peut-il confirmer ?)
[...]


Non non, vim aussi depuis des années, et comme tous les clones
de vi, il connait les "ranges" de lignes (seulement depuis 30
ans...):

:g/pattern1/,/pattern2/d

Voir :h _
dans vim pour les regexps multi-lignes.

Et ensuite, on peut toujours faire:

:%! perl -0777 -pe 's/.../.../s'

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]


Avatar
thomas.baruchel
si tu rencontres fréquemment ce genre de besoin, il se peut que
l'éditeur sam t'intéresse, car il gère les expressions régulières
sur plusieurs lignes (je crois que c'est le seul, mais quelqu'un
peut-il confirmer ?)
[...]


Non non, vim aussi depuis des années, et comme tous les clones
de vi, il connait les "ranges" de lignes (seulement depuis 30
ans...):


exact, je viens de m'en apercevoir; mais il me semblait avoir lu dans
la documentation de sam (il y a deux ou trois ans de cela, donc ma
mémoire me trahit), de la prose très militante sur ce qui semblait
un défaut de fond à l'auteur de sam chez les autres éditeurs, et je
croyais me souvenir que cela était lié aux expressions régulières;
quelqu'un voit-il de quoi je parle ?

--
« nous devons agir comme si la chose qui peut-être ne sera pas devait
être » (Kant, Métaphysique des moeurs, doctrine du droit, II conclusion)

Thomas Baruchel


Avatar
Remi Moyen
On Wed, 4 Feb 2004, Stephane Chazelas wrote:

Voir :h _
dans vim pour les regexps multi-lignes.


Ce que j'adore avec vi, c'est que même pour l'aide, la syntaxe est
absolument évidente... :-)

N'empêche qu'au moins, on homogéneïse l'usure des touches du clavier : les
$, _, ^ et autres sont aussi utilisés (voir plus, pour compenser) que
les lettres et chiffres.

(bon, je plaisante, hein, pas la peine de m'expliquer que y'a aussi un
index et tout et tout. Et en plus, j'utilise pas mal vim et j'en suis très
content.)
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."

Avatar
Stephane Chazelas
2004-02-4, 15:02(+01), Remi Moyen:
On Wed, 4 Feb 2004, Stephane Chazelas wrote:

Voir :h _
dans vim pour les regexps multi-lignes.


Ce que j'adore avec vi, c'est que même pour l'aide, la syntaxe est
absolument évidente... :-)


Ben oui, quand on veut de l'aide sur _, on fait :help _, c'est
un peut rude, mais on peut aussi abbrévier avec :h _ pour
s'économiser les doigts, une fois qu'on a fait :help puis :help :help.

N'empêche qu'au moins, on homogéneïse l'usure des touches du clavier : les
$, _, ^ et autres sont aussi utilisés (voir plus, pour compenser) que
les lettres et chiffres.
[...]


Et c'est vrai qu'on sent que ça a été plus pensé pour des
claviers QWERTY qu'AZERTY...

Cela dit, c'est vrai que le « _.{-} » (équivalent non-greedy
et multi-line de .*) est un peu fastidieux à taper.

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]