Как удалить второй столбец в 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

или вручную в визуальном режиме:

  1. Перейдите во второй столбец (например, нажав: W).
  2. Запустите визуальный блок, нажав Ctrl + v.
  3. Выберите второй столбец (например, нажав: W, G).
  4. Удалите его, нажав кнопку 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 :-).

Другие вопросы по тегам