Удаление первого столбца с помощью vim

У меня есть текстовый файл.

number 1_1 \t number1_2 \t etc
number 2_1 \t number2_2 \t etc

Я хочу удалить первый столбец этого файла (соответствует number1_1, number2_1 и т. Д., То есть номера перед первой вкладкой для каждой строки). Я прочитал этот пост, в котором предлагается решение удалить первый столбец (см. Ответ Петра). Однако, это не работает для меня, так как числа имеют разные размеры, и я не могу повторить операцию по удалению первого столбца. Как я могу сделать тогда?

5 ответов

Решение

Это должно удалить все символы до и включая первую вкладку в любой строке:

:%s/^[^\t]*\t//

Командная строка cut:

cut -f 2- {filename.txt} > {filenamenew.txt}

по умолчанию вырезать вкладки; если вы хотите что-то еще, как пробел добавить -d " ", -f это поля для копирования. 2- означает все из (и включая) столбец 2.

:% s/[ ^\t] * \t//

На каждой строке (%), заменить (s/ORIGINAL/REPLACEMENT/) первое появление "символов без табуляции ([^\t]в любом количестве (*)) с последующей вкладкой \tНичем. Вы можете ввести Tab вместо \t,

В качестве альтернативы вы можете сопоставить самую короткую последовательность символов (.\{-}) заканчивается на вкладке. .*\t будет соответствовать самый длинный матч для .*так что это будет соответствовать всем, кроме последнего столбца; .\{-} соответствует самому короткому совпадению, которое является первым столбцом.

:%s/. \{-}\t//

Через awk,

awk -F"\t" '{print FS,$2}' file > newfile

Он обрезает первый столбец и печатает только оставшуюся вкладку и второй столбец.

Через sed,

sed -r 's/^([^\t]*)\t(.*)$/\t\2/g' file > newfile

В Vi, чтобы удалить первый столбец (разделенный пробелом), вы можете сделать:

:%norm dW

для столбца, разделенного Tab, это:

:%norm df Ctrl + V Tab

Таким образом, команда, которая удалит первый столбец из файла (на месте), может быть:

ex +"%norm df$(echo -e '\t')" -scwq file

Чтобы проверить выход перед сохранением (пробный запуск), замените -scwq с -sc'%p|q!' ,

Или на основании предложения Криса, например:

ex -c':exe ":%norm df\<Tab>"' -sc'%p|q!' <(echo -e "a a\tb b\tc c")

В качестве альтернативы сделайте это в визуальном режиме (если начинать сверху слева):

  1. Войдите в визуальный блок с помощью Ctrl + v.
  2. Перейдите в конец и выберите первый столбец, нажав: G, E (или настройте вручную).
  3. Нажмите d, чтобы удалить выбранный блок.

Чтобы удалить оставшееся место перед вторым столбцом, я предлагаю:

:%norm dfCtrl + VTabx

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