Vi editör: Bir dosyadaki birden çok satırı silmenin en hızlı yolu nedir?


12

Bir dosyadaki birden çok satırı silmek için Vi düzenleyicisini kullanmak istiyorum. Lütfen bana fikir veya öneri verin.

Amacım şöyle:

Önce:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.
.
29
30
.
.

Sonra;

1
10
20
30
40
.
.

3
silmek için satırları nasıl seçersiniz? Her 10 satırda bir satır bırakmak ister misiniz?
matzeri

1
:[range]dÖrneğin :3,5düç ile beş arasındaki satırları (dahil) silerek satır aralıklarını silebilirsiniz .
Bratchley


@R Ketkaew - Bir sayı listesini kaldırmaya mı çalışıyorsunuz yoksa satır mı? Açıklığa kavuşturmak için lütfen sorunuzu güncelleyebilir misiniz?
DarkHeart

Vi hakkında soru sorduğunu biliyorum, ama GNU Sed ile de yapabilirsin:gsed -n '1p; 0~10p'
shadowtalker

Yanıtlar:


17

Her 10 satırda bir tutmak ve geri kalanını silmek istediğinizi kastediyorsanız:

%norm 9ddj

Açıklama:

% bütün dosya

norm "normal modda" aşağıdaki komutları yürütün

9dd 9 satırı sil

j bir satır aşağı git (yani sakla)

not: bu ilk satırı siler.

Http://www.rayninfo.co.uk/vimtips.html adresinden uyarlanmıştır.


Veya global komutu kullanarak:

  • İlk satırı çoğalt ggYP
  • :g/^/+ d9

Https://stackoverflow.com/questions/1946738/vim-how-to-delete-every-second-row adresinden uyarlanmıştır.


Veya şunları kullanabilirsiniz awk:

%!awk 'NR \% 10 == 0 || NR == 1'

Awk komutu benim için çalışıyor. Her zaman awk'ın en az bir blok gerektirdiğini düşündüm {...}. bilmediğini bilmek güzel. Çalıştığım ilk önemsiz awk komutu!
the_velour_fog

1
@the_velour_fog blok olup gerekmez. eğer bir tane { print $0 }
yazmazsanız

@RKetkaew Hangi seçeneklerden birini kullandınız? Bir yanıt sorunuzu çözerse, lütfen yanıt olarak işaretlemek için onay işaretini tıklayın.
underscore_d

@underscore_d Merhaba, DarkHeart tarafından önerilen bir komut kullandım. Yorumlarınız için teşekkür ederim.
rangsiman

12
:2,$v/0$/d

0ikinci satırdan başlayarak bitmeyen satırları siler .


2
Bu, akıllıca bir çözümdür. Sadece bir açıklama eklersiniz 2,$aralıktır ve komutu. Eşleşmeyen tüm satırlarda çalıştırılacak normal ifade ve ex komutu nerede . v/0$/dg!0$d
grochmal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.