Me gustaría usar el editor Vi para eliminar varias filas en un archivo. Por favor, dame una idea o sugerencia.
Mi objetivo es así:
Antes de:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.
.
29
30
.
.
Después;
1
10
20
30
40
.
.
Si quiere decir que desea conservar cada décima línea y eliminar el resto:
%norm 9ddj
Explicación:
%
archivo completo
norm
ejecutar los siguientes comandos en "modo normal"
9dd
eliminar 9 líneas
j
moverse hacia abajo una línea (es decir, mantenerla)
nota: esto elimina la primera fila.
Adaptado de http://www.rayninfo.co.uk/vimtips.html
O usando el comando global:
:g/^/+ d9
Adaptado de /programming/1946738/vim-how-to-delete-every-second-row
O podrías usar awk
:
%!awk 'NR \% 10 == 0 || NR == 1'
{...}
. Es bueno saber que no. ¡Es el primer comando awk no trivial que tengo funcionando!
{ print $0 }
:2,$v/0$/d
elimina las líneas que no terminan 0
comenzando desde la segunda.
2,$
es el rango y v/0$/d
el g!
comando. ¿Dónde 0$
está la expresión regular y d
el comando ex que se ejecutará en todas las líneas que no coinciden?
:[range]d
por ejemplo,:3,5d
elimina las líneas tres a cinco (inclusive).gsed -n '1p; 0~10p'