vi只保留列的前10个字符

时间:2015-11-17 08:33:42

标签: vim awk sed

我如何在vi中执行此操作?

awk -F"," awk '{print substr($1,1,10)}'

我只想保留我的日期列的前10个字符(例如2014-01-01)并且不包括时间戳。

我尝试在awk中执行此操作但是我收到了此错误:

sed: RE error: illegal byte sequence

我认为这是一个bash_profile设置错误。

这就是我在bash_profile中所拥有的:

#export LANG=en_US.UTF-8
#export LOCALE=UTF-8

export LC_CTYPE=C
export LANG=C

3 个答案:

答案 0 :(得分:9)

在vim中,执行:

:%norm! 11|D

这会影响缓冲区中的所有行。

如果您愿意,:s也可以完成这项工作。

答案 1 :(得分:6)

:%s/.\{,10}\zs.*//
  • :%s/:将替换应用于所有行
  • .\{,10}:匹配任何最多10次(贪婪)
  • \zs:表示比赛的开始
  • .*:匹配行的其余部分
  • /:s
  • 的第一部分结束
  • /s的第二部分结束(因为两个/之间没有任何内容,所以无需替换,即删除)

答案 2 :(得分:4)

要编辑文本块,可以通过-- VISUAL BLOCK --(在Windows上CTRL-V)访问CTRL-Q模式。然后,您可以按 d 删除您的选择。

或者使用简单的替代命令

:%s/\%>10c.*//
  • \%>10c - 第十列后的匹配
  • . - 匹配任何单个字符,但不匹配行尾
  • * - 匹配前面原子的0或更多,尽可能多

或者您可以使用范围

:1,3s/\%>10c.*//

这将取代前三行。