Удаление первого столбца с помощью 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/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")
В качестве альтернативы сделайте это в визуальном режиме (если начинать сверху слева):
- Войдите в визуальный блок с помощью Ctrl + v.
- Перейдите в конец и выберите первый столбец, нажав: G, E (или настройте вручную).
- Нажмите d, чтобы удалить выбранный блок.
Чтобы удалить оставшееся место перед вторым столбцом, я предлагаю:
:%norm df
Ctrl + VTabx