Редактор Vi: Який найшвидший спосіб видалити кілька рядків у файлі?


12

Я хотів би скористатися редактором Vi, щоб видалити кілька рядків у файлі. Будь ласка, дайте мені ідею чи пропозицію.

Моя мета така:

Перед:

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

Після;

1
10
20
30
40
.
.

3
як ви вибрали рядки для видалення? Ви хочете залишити один ряд кожні 10?
matzeri

1
Ви можете видалити діапазони рядків, :[range]dнаприклад, :3,5dвидалити рядки три-п'ять (включно).
Братчлі

6
Існує також vi.stackexchange .
Олексій

@R Ketkaew - Ви намагаєтесь видалити список номерів чи це рядки? Чи можете ви, будь ласка, оновити своє запитання, щоб уточнити?
DarkHeart

Я знаю, що ви запитуєте про Vi, але ви також можете gsed -n '1p; 0~10p'
попрацювати

Відповіді:


17

Якщо ви хочете сказати, що хочете зберегти кожен 10-й рядок і видалити решту:

%norm 9ddj

Пояснення:

% цілий файл

norm виконати наступні команди в "звичайному режимі"

9dd видалити 9 рядків

j рухатися вниз по одному рядку (тобто тримати його)

Примітка: при цьому видаляється перший рядок.

Адаптовано з http://www.rayninfo.co.uk/vimtips.html


Або за допомогою глобальної команди:

  • Скопіюйте перший рядок ggYP
  • :g/^/+ d9

Адаптовано з /programming/1946738/vim-how-to-delete-every-second-row


Або ви можете використовувати awk:

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

Команда awk працює для мене. Я завжди думав, що для awk потрібен мінімум один блок {...}. приємно знати, що ти цього не робиш. Це перша нетривіальна команда awk, над якою я працюю!
the_velour_fog

1
@the_velour_fog блок буде необхідно. якщо ви цього не { print $0 }
напишете

@RKetkaew Який із варіантів ви використовували? Якщо відповідь вирішує ваше запитання, натисніть на галочку, щоб позначити її як відповідь.
підкреслюй_d

@underscore_d Привіт, я використав команду, запропоновану від DarkHeart. Дякую за ваші коментарі.
rangsiman

12
:2,$v/0$/d

видаляє рядки, які не закінчуються, 0починаючи з другого.


2
Це, це розумне рішення. Я б просто додати пояснення , що 2,$це діапазон, і v/0$/dв g!команді. Де 0$знаходиться регулярний вираз і dкоманда ex, яка буде виконуватися у всіх рядках, які не відповідають.
грохмаль
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.