用vim删除第一列

我有一个文本文件。

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

我想删除此文件的第一列(对应于number1_1,number2_1等,即每行的第一个选项卡之前的数字)。 我读过这篇文章 ,建议删除第一列的解决方案(参见Peter的回答)。 但是,它对我不起作用,因为数字有不同的大小,我不能重复删除第一列的操作。 那怎么办?

这应删除所有字符,包括任何行上的第一个标签:

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

命令行cut

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

剪切默认为标签; 如果你想要像空格一样的东西添加-d " "-f是要复制的字段。 2-表示全部来自(包括)第2列。

通过awk

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

它会剪切第一列并仅打印剩余的标签和第二列。

通过sed

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

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

在每一行( % )上,替换( /ORIGINAL/REPLACEMENT/) the first occurrence of “non-tab characters ( [^ \ t ] ) in any numbre ( * ) followed by a tab \ t ” by nothing. You can type Tab instead of ” by nothing. You can type Tab instead of \ t`。

或者,您可以匹配以制表符结尾的最短字符序列( .\{-} )。 .*\t将匹配.*\t的最长匹配,因此它将匹配除最后一列之外的所有匹配项; .\{-}匹配第一列的最短匹配。

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

在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\"' -sc'%p|q!' <(echo -e "aa\tb b\tc c") 

或者以可视模式进行(如果从左上角开始):

  1. Ctrl + v输入visual-block。
  2. 最后跳转并按下: GE (或手动调整)选择第一列。
  3. d删除所选块。

要删除第二列之前的剩余空间,我建议:

:%norm df Ctrl + V Tab x