Как удалить второй столбец в Vim?
У меня есть файл с разделителями табуляции, как:
name1 verb1 name2 verb2 etc...
Я хочу удалить второй столбец. Я попытался отредактировать один из этих ответов, но не был знаком с sed
а также awk
Я не мог.
Может кто-нибудь мне помочь?
5 ответов
В vim у вас должна быть возможность использовать команду
:%s/\t[^\t]*//
(замените TAB, за которым следует ноль или более вхождений любого символа, кроме TAB, ни с чем). Если ваш файл имеет только два столбца, вы можете использовать немного более простой :%s/\t.*
или же :%s/\t.*$
которые заменяют первый TAB и любые последующие символы до конца строки.
Принятый ответ гораздо более элегантный, чем этот (я проголосовал за него!), Но если вы его не помните, вы можете использовать vim
режим визуального блока напрямую. Откройте vim и перейдите (обычный режим) в первый угол столбца, например:
Тип CTRL-V
и вы можете переместить курсор, чтобы выбрать столбец, это на полпути:
Чтобы перейти в конец, нажмите G
:
блок кажется сломанным, потому что мы находимся на последней строке, которая является пустой; просто подняться на одну строку (со стрелкой вверх или k
) чтобы увидеть это снова...
Теперь вы просто нажимаете x
удалить блок:
Я хотел бы использовать cut
за это
cut -f1,3- file.txt > newfile.txt
mv newfile.txt file.txt
Вы также можете использовать это как фильтр в vim (это заменит все строки в файле; вы также можете использовать (например) 2,9
вместо %
обработать строки 2-9 или выбрать нужные строки V
):
:%!cut -f1,3-
-f1,3-
означает "печать первого поля, за которым следует третье поле и все поля до конца строки". По умолчанию, cut
использует вкладку в качестве разделителя; если вам нужно что-то еще, используйте -d
вариант (см. man cut
).
Вы можете попробовать либо:
:%norm WdW
или вручную в визуальном режиме:
- Перейдите во второй столбец (например, нажав: W).
- Запустите визуальный блок, нажав Ctrl + v.
- Выберите второй столбец (например, нажав: W, G).
- Удалите его, нажав кнопку d.
Чтобы сделать это на месте из командной строки, попробуйте:
$ ex +':exe ":%norm f\<Tab>dE"' -scx file
Связанный: Как написать литерал для клавиши Tab, чтобы использовать для движения?
Смотрите также:
Чтобы удалить столбец, начинающийся с 83 символов слева, до 94-го символа, вы можете попробовать это (переместите курсор, пока не дойдете до сторон столбцов, которые вы хотите удалить, и используйте Control-G, чтобы увидеть, что ваш курсор должность такая):
:%s/\(^.\{83}\).\{11}/\1/
Вкратце: сопоставьте первые 83 символа в каждой строке, запомните, что совпало, теперь сопоставьте следующие 11 символов и замените весь этот набор из 94 символов первыми совпавшими 83 символами.
Из http://www.peterscheie.com/unix/vi_del_columns.html .
Более подробно, вот весь процесс: нажмите клавишу Escape, а затем двоеточие, чтобы перейти к подсказке с двоеточием. Теперь мы говорим: «В каждой строке%
, мы выполним поиск и заменуs
и вот регулярное выражение, которое мы собираемся искать. Помните следующую часть\(
: Начиная с начала строки^
, найдите любой символ, сделайте это 83 раза\{83}
, это конец воспоминаний\)
. Теперь сопоставьте любой символ.
, сделать это 11 раз\{11}
. Теперь я сказал вам, что искать, дальше мы будем делать, что заменить его на . Возьмите первое, что я попросил вас запомнить, и используйте его, чтобы заменить то, что мы сопоставили.\1
. Наконец, это конец нашего поиска и замены/
.
Но будьте осторожны, в своей статье он говорит о «colrm», как будто это часть vim, но это не так. Это выход из оболочки, а colrm нет на моей машине с Windows :-).