答案1
接受的答案比这更优雅(我赞成它!)但如果你不记得了,你可以使用vim
视觉块模式直接。打开 vim 并进入(正常模式)列的第一个角,如下所示:
输入CTRL-V
后您就可以移动光标来选择列,这是中间:
要到达最后,请按G
:
该块似乎被破坏了,因为我们在最后一行是空白的;只需向上移动一行(使用向上箭头或k
)即可再次看到它……:
现在您只需按下x
即可删除该块:
答案2
在 vim 中,你应该能够使用命令
:%s/\t[^\t]*//
(替换TAB后跟零个或多个任何字符,但TAB不包括任何内容)。如果你的文件只有两列,你可以使用稍微简单一点的:%s/\t.*
或:%s/\t.*$
替换第一列TAB和任何跟随字符直到行尾。
答案3
我会用cut
这个
cut -f1,3- file.txt > newfile.txt
mv newfile.txt file.txt
您也可以将其用作 vim 中的过滤器(这将替换文件中的所有行;您也可以使用(例如)2,9
而不是%
来处理第 2-9 行,或者使用 选择您想要的行V
):
:%!cut -f1,3-
-f1,3-
表示“打印字段一,然后打印字段三,以及所有字段,直到行尾”。默认情况下,cut
使用制表符作为分隔符;如果您需要其他分隔符,请使用选项-d
(请参阅man cut
)。
答案4
要删除从左侧 83 个字符开始到第 94 个字符的列,您可以尝试此操作(移动光标,直到到达要删除的列的两侧,然后使用 Control-G 查看光标的位置):
:%s/\(^.\{83}\).\{11}/\1/
简而言之:匹配每行的前 83 个字符,记住匹配的内容,现在匹配接下来的 11 个字符,并用前匹配的 83 个字符替换整整 94 个字符。
从http://www.peterscheie.com/unix/vi_del_columns.html。
更详细地说,整个过程如下:按下 Esc 键,然后按下冒号,以进入冒号提示符。现在我们说,“在每一行%
,我们将进行搜索和替换s
,这是我们要查找的正则表达式/
。记住下一部分\(
:从行首开始^
,匹配任何字符.
,执行 83 次\{83}
,这就是记忆的结束\)
。现在匹配任何字符.
,执行 11 次\{11}
。现在我已经告诉您要查找什么,接下来我们将用什么来替换它/
。用我要求您记住的第一件事来替换我们匹配的内容\1
。最后,这就是我们的搜索和替换的结束/
。
但要注意,他在文章中提到“colrm”,好像它是 vim 的一部分,但事实并非如此。它是一个 shell 转义,而我的 Windows 机器上没有 colrm :-)。