Что самый эффективный путь состоит в том, чтобы неоднократно удалять начальный текст с помощью Vim?

Что самый эффективный путь состоит в том, чтобы удалить текст 07.04.2010 14:25:50  773 ОТЛАДКИ, Это - оператор журнала отладки - от файла журнала как извлечение ниже использования Vim?

2010-04-07 14:25:50,772 DEBUG This is a debug log statement - 9,8
2010-04-07 14:25:50,772 DEBUG This is a debug log statement - 1,11
2010-04-07 14:25:50,772 DEBUG This is a debug log statement - 5,2
2010-04-07 14:25:50,772 DEBUG This is a debug log statement - 8,4

Это - то, на что должен быть похожим результат:

9,8
1,11
5,2
8,4

Обратите внимание, что в этом случае я использую gVim в Windows, поэтому не предлагайте программы UNIX, которые могут лучше подходить для задачи — я должен сделать это с помощью Vim.

6
задан John Topley 7 April 2010 в 13:53
поделиться

6 ответов

Выполните команду: :% s /.* - //

Редактировать, объяснение:

%: whole file
s: subsitute
.* - : find any text followed by a space a dash and a space.
// : replace it with the empty string.
13
ответ дан 8 December 2019 в 05:54
поделиться

Вы можете:

1,$s/.*- //
  • 1 : строка 1
  • $ : последняя строка
  • s : подстановка
  • . * : что угодно

Таким образом, он заменяет в каждой строке все, что сопровождается дефисом и пробелом, ничем.

0
ответ дан 8 December 2019 в 05:54
поделиться

Самый простой способ - использовать макрос. Нажмите qa , чтобы начать запись в регистре a . Затем удалите символы, как вы привыкли в Vim. Нажмите q , чтобы остановить запись. Затем возьмите количество строк и добавьте @a , например, для 4 нажмите 4 @ a . Это повторит макрос 4 раза.

1
ответ дан 8 December 2019 в 05:54
поделиться

Вы также можно использовать режим визуального блока для выбора всех символов, которые вы хотите удалить:

gg        Go to the beginning of the file
Ctrl-v    Enter visual block mode
G         Go to the end of the file
f-        Go to dash
<right>   Go one more to the right
d         Delete the selected block
6
ответ дан 8 December 2019 в 05:54
поделиться

:% s /. \ {-} \ ze \ d \ +, \ d \ + $ //

Эта команда работает путем привязки к числам, разделенным запятыми в конце строки, поэтому он работает, даже если все остальное, кроме этих чисел в строке, изменится .

Метод визуального блока, вероятно, является самым простым решением, и я бы его использовал. Но это не сработает, если строки будут располагаться в шахматном порядке, например:

2010-04-07 14:25:50,772 DEBUG This is a debug log statement - 9,8
2010-04-07 14:25:50,772 DEBUG This is another debug log statement - 9,8

Разделитель также может измениться на другой символ, поэтому строка будет выглядеть так:

2010-04-07 14:25: 50,772 DEBUG Это оператор журнала отладки | 9,8

Тогда использование :% s /.* - // не сработает.

Объяснение для регулярного выражения:

. \ {-} соответствует любому, исключая символы новой строки, как можно меньше

\ ze прекращает сопоставление, поэтому замена не влияет на следующие символы

\ d \ +, \ d \ + $ цифры, по крайней мере, одна, за которой следует запятая, за которой следуют цифры, по крайней мере, одна, и конец строки

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

0
ответ дан 8 December 2019 в 05:54
поделиться

Мое решение:

qa                 [start recording in record buffer a]
^ (possibly twice) [get to the beginning of the line]
d3f-               [delete everything till - including]
<del>              [delete the remaining space]
<down>             [move to next line]
q                  [end recording]
<at>a              [execute recorded command]

Затем просто удерживайте , пока не закончите, и позвольте автоматическому повторению клавиш сделать всю работу за вас.

Примечание:
Хотя записанные макросы не всегда могут быть самым быстрым и идеальным инструментом для работы, часто проще записать и выполнить макрос, чем искать что-то получше.

2
ответ дан 8 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

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