Удалить строки, начинающиеся и содержащие только целые числа в Vim

Удалить строки, начинающиеся и содержащие только целые числа в Vim

У меня есть файл, содержащий целые числа (номера строк) и текст. При извлечении PDF-файла эти номера строк были помещены в отдельные строки из текста, и я хочу удалить все эти номера строк. Я не очень хорошо разбираюсь в регулярных выражениях, но я на 100% уверен, что это не должно быть очень сложно. Я использую vim/nvim, но если бы мне пришлось использовать awk/sed, это тоже сработало бы для меня.

Файл выглядит примерно так:

123
124
125

Text was found in
those three lines
should stay

Поэтому в идеале я хочу искать: все строки, которые начинаются с положительного целого числа (1,2,3...123456) и не содержат ничего, кроме этого целого числа. Их следует удалить.

Буду признателен за любую оказанную помощь.

Бонусный вызов: по какой-то причине некоторые строки начинаются с ^L1234, так что есть дополнительный специальный символ. В какой-то момент я бы захотел удалить и их. Хотя это могут быть отдельные шаги.

решение1

  • [0-9]это простоколлекцияцифр, которые работают почти везде. В Vim вы также можете использовать \d(десятичная цифра).
  • Вам нужен один или несколько экземпляров: добавьте \+множитель.
  • Это должно быть единственное, что есть в строке, поэтому регулярное выражение должно бытьякорьк началу и концу (через ^и $соответственно).
  • Вам нужно попытаться найти соответствие во всех строках; в Vim это делается с помощью :global/{pattern}/.
  • Соответствующие линии должны быть :deleted.

Взяты вместе:

:global/^[0-9]\+$/delete

Вы также можете использовать sed; это быстрее и работает неинтерактивно. Поскольку это автоматически применяет любое правило ко всем входным строкам, вам не нужен :global, а :deleteесть просто d. С -i, замена выполняется на месте (поэтому убедитесь, что все правильно и у вас есть резервная копия исходного файла!)

sed -i -e '/^[0-9]\+$/d' file

Для необязательного префикса множитель для этого равен \?. Если это ^Lодин символ, вам, вероятно, нужно ввести его в Vim как <C-V><C-L>.

решение2

Удалить строки, начинающиеся и содержащие только целые числа в Vim

:%s/^[0-9]\+\n//gc

Объяснение

  • :%s//- глобальный поиск и замена
  • ^- начать с начала строки
  • [0-9]- сопоставьте цифры
  • \+- жадное совпадение одного или нескольких
  • \nсопоставьте новую строку (Примечание: проверьте окончания строк, они различаются в разных системах и могут быть eg \r\nвместо этого)
  • gc- глобальное соответствие + подтверждение (удалить, cесли их много или вы уверены

Выход

123
124
125

Text was found in
those three lines
should stay

:%s/^[0-9]*\n//g

Text was found in
those three lines
should stay

Бонус

Заответ тердона на U&L, то ^Lесть form feed character, можно удалить с помощью sed:

sed 's/\o14//g' file 

Стоит прочитать этот ответ, чтобы увидеть другие способы сделать это.

Связанный контент