用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")
或者以可视模式进行(如果从左上角开始):
- 按Ctrl + v输入visual-block。
- 最后跳转并按下: G , E (或手动调整)选择第一列。
- 按d删除所选块。
要删除第二列之前的剩余空间,我建议:
:%norm df
Ctrl + V Tab x