Deleting first column with vim
I have a text file.
number 1_1 \t number1_2 \t etc
number 2_1 \t number2_2 \t etc
I want to remove the first column of this file (corresponding to number1_1, number2_1 etc, ie the numbers before the first tab for each row). I read this post that proposes a solution to delete the first column (see Peter's answer). However, it doesn't work for me as the numbers have different sizes and I cannot repeat the operation to delete the first column. How can I do then?
Solution 1:
This should delete all chars before and including the 1st tab on any line:
:%s/^[^\t]*\t//
Command line cut
:
cut -f 2- {filename.txt} > {filenamenew.txt}
cut defaults to tabs; if you want something else like a space add -d " "
.
-f
is fields to copy over. 2- means all from (and including) column 2.
Solution 2:
Through awk
,
awk -F"\t" '{print FS,$2}' file > newfile
It cuts the first column and prints only the remaining tab and second column.
Through sed
,
sed -r 's/^([^\t]*)\t(.*)$/\t\2/g' file > newfile
Solution 3:
:%s/[^\t]*\t//
On every line (%
), replace (s/ORIGINAL/REPLACEMENT/
) the first occurrence of “non-tab characters ([^\t]
, in any number (*
)) followed by a tab \t
” by nothing. You can type Tab instead of \t
.
Alternatively you can match the shortest sequence of characters (.\{-}
) ending in a tab. .*\t
would match the longest match for .*
, so it would match all but the last column; .\{-}
matches the shortest match which is the first column.
:%s/.\{-}\t//
Solution 4:
In Vi to remove first column (separated by space), you can do:
:%norm dW
for a column separated by Tab, it's:
:%norm df
Ctrl+VTab
So the command which would remove the first column from file (in-place) can be:
ex +"%norm df$(echo -e '\t')" -scwq file
To check the output before saving (dry-run), replace -scwq
with -sc'%p|q!'
.
Or based on Chris suggestion, like:
ex -c':exe ":%norm df\<Tab>"' -sc'%p|q!' <(echo -e "a a\tb b\tc c")
Alternatively do it in visual mode (if starting from the top-left):
- Enter visual-block by Ctrl+v.
- Jump at the end and select first column by pressing: G, E (or adjust manually).
- Press d to delete the selected block.