Удаление первого столбца с помощью 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 dfCtrl + VTabx