Как удалить все строки в файле с помощью vi?

Как удалить все строки в файле с помощью vi?

В данный момент я делаю это, используя что-то вроде этого, чтобы удалить все строки в файле:

echo> test.txt

Как удалить все строки с помощью vi?

Примечание: Использование dd не является хорошим вариантом. Может быть много строк.

vi
219 голосов | спросил Cold 13 +04002014-10-13T15:32:56+04:00312014bEurope/MoscowMon, 13 Oct 2014 15:32:56 +0400 2014, 15:32:56

9 ответов


388

В vi do

: 1, $ d

, чтобы удалить все строки.

: вводит команду (и перемещает курсор в нижнюю часть).
1, $ - это индикация того, в каких строках должна работать следующая команда (d). В этом случае диапазон от первой до последней строки (обозначается $, поэтому вам не нужно знать количество строк в документе).
Конечный d означает удаление указанных строк.

Существует более короткая форма (:% d), но я не использую ее. : 1, $ d можно более легко «адаптировать», например. : 4, $ - 2d, оставляя только первые 3 и последние 2 строки, удаляя остальные.

ответил Anthon 13 +04002014-10-13T15:35:41+04:00312014bEurope/MoscowMon, 13 Oct 2014 15:35:41 +0400 2014, 15:35:41
132

В vi я использую

:% d

, где

  • : сообщает vi перейти в командном режиме
  • % означает всю строку
  • d: удалить

В командной строке

> test.txt

также сделает.

В чем проблема с dd?

dd if = /dev /null of = test.txt

, где

  • /dev /null - это специальный 0-байтовый файл
  • , если является входным файлом
  • of - это файл ouput
ответил Archemar 13 +04002014-10-13T15:41:56+04:00312014bEurope/MoscowMon, 13 Oct 2014 15:41:56 +0400 2014, 15:41:56
46

Я бы рекомендовал вам просто сделать это (должен работать в любой POSIX-совместимой оболочке):

> test.txt

Если вы действительно хотите сделать это с помощью vi, вы можете сделать:

  • 1G (перейти к первой строке)
  • dG (удалить до последней строки)
ответил Chris Down 13 +04002014-10-13T15:35:32+04:00312014bEurope/MoscowMon, 13 Oct 2014 15:35:32 +0400 2014, 15:35:32
24

Если ваш курсор находится в первой строке (если нет, введите: gg или 1G)), вы можете просто использовать dG. Он удалит все строки из текущей строки до конца файла. Поэтому, чтобы убедиться, что вы удалите все строки из файла, вы можете смешать оба вместе, что было бы: ggdG (в режиме командной строки).

Или % d в режиме Ex, пример командной строки: vim +% d foo.bar.

Связано: Как я могу удалить в VIM весь текст из текущей строки в конец файла?

ответил kenorb 13 +04002014-10-13T20:19:06+04:00312014bEurope/MoscowMon, 13 Oct 2014 20:19:06 +0400 2014, 20:19:06
19

Я ленивый чувак, и мне нравится держать его простым. ggdG - это пять нажатий клавиш, включая Shift

gg переходит в первую строку в файле, d - это начало d elete verb и G - это движение, чтобы перейти к нижней части файла. Верно, это идет к началу файла и удаляет все до конца плитки.

ответил TankorSmash 15 +04002014-10-15T19:48:16+04:00312014bEurope/MoscowWed, 15 Oct 2014 19:48:16 +0400 2014, 19:48:16
10

Перейдите к началу файла и нажмите d G .

ответил cppcoder 15 +04002014-10-15T09:30:53+04:00312014bEurope/MoscowWed, 15 Oct 2014 09:30:53 +0400 2014, 09:30:53
3

Я всегда использую ggVG

  • gg переходит к началу текущего файла редактирования
  • V (с заглавной буквы v) выберет текущую строку. В этом случае первая строка текущего файла редактирования
  • G (заглавная буква g) переместится в конец файла. В этом случае, поскольку я выбрал первую строку, G выберет весь текст в этом файле.

Затем вы можете просто нажать d или x, чтобы удалить все строки.

ответил yegle 15 +04002014-10-15T00:19:18+04:00312014bEurope/MoscowWed, 15 Oct 2014 00:19:18 +0400 2014, 00:19:18
3

Обратите внимание, что в вашем вопросе echo> test.txt создает файл с одним разрывом строки в нем, а не пустой файл.

Из оболочки рассмотрим использование echo -n> test.txt или :> test.txt.

Хотя я обычно использовал команду редактирования vi (я использую ggdG), вы также можете вызвать оболочку со ссылкой на текущий файл следующим образом:

:: >%

Это почти так же сжато, как ggdG, но сложнее ввести, и вы также должны подтвердить, что хотите перезагрузить измененный файл, поэтому я не рекомендую его в этом случае, но зная, как использовать команды оболочки из vi, как это полезно.

сломать его:

  • : инициировать команду vi
  • ! инициировать команду оболочки
  • : это встроенная командная оболочка с пустым выпуском
  • > перенаправить вывод
  • % vi заменяет это именем текущего файла

Предлагаемый : 1, $ d также является хорошим, конечно, и только когда я нахожусь там, есть также 1GdG

ответил mc0e 17 +04002014-10-17T09:36:25+04:00312014bEurope/MoscowFri, 17 Oct 2014 09:36:25 +0400 2014, 09:36:25
3

Другое решение:

truncate -s 0 file
ответил slawx 15 J000000Friday16 2016, 17:05:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132