Je voudrais utiliser l'éditeur Vi pour supprimer plusieurs lignes dans un fichier. Veuillez me donner une idée ou une suggestion.
Mon objectif est le suivant:
Avant:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.
.
29
30
.
.
Après;
1
10
20
30
40
.
.
:[range]d
par exemple les:3,5d
lignes trois à cinq (inclusivement).gsed -n '1p; 0~10p'
Réponses:
Si vous voulez conserver toutes les 10 lignes et supprimer le reste:
Explication:
%
fichier entiernorm
exécuter les commandes suivantes en "mode normal"9dd
supprimer 9 lignesj
descendre d'une ligne (c'est-à-dire la garder)remarque: cela supprime la première ligne.
Adapté de http://www.rayninfo.co.uk/vimtips.html
Ou en utilisant la commande globale:
:g/^/+ d9
Adapté de /programming/1946738/vim-how-to-delete-every-second-row
Ou vous pouvez utiliser
awk
:la source
{...}
. bon de savoir que vous ne le faites pas. C'est la première commande awk non triviale que je travaille!{ print $0 }
supprime les lignes qui ne finissent pas en
0
commençant par la seconde.la source
2,$
est la plage etv/0$/d
lag!
commande. Où se0$
trouve l'expression régulière etd
la commande ex qui seront exécutées sur toutes les lignes qui ne correspondent pas.