vi只保留列的前10个字符

jxn*_*jxn 8 vim awk sed

我怎么在vi中这样做?

awk -F"," awk '{print substr($1,1,10)}'
Run Code Online (Sandbox Code Playgroud)

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

我试图在awk中做到这一点,但我得到了这个错误:

sed: RE error: illegal byte sequence
Run Code Online (Sandbox Code Playgroud)

我相信这是一个bash_profile设置错误.

这就是我在bash_profile中的含义:

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

export LC_CTYPE=C
export LANG=C
Run Code Online (Sandbox Code Playgroud)

Ken*_*ent 9

在vim中,执行:

:%norm! 11|D
Run Code Online (Sandbox Code Playgroud)

这将影响缓冲区中的所有行.

如果你愿意,:s也可以做这个工作.

  • @jxn上面的命令中有一个神奇的数字`11`.那可能意味着什么? (3认同)
  • @Kent [修辞问题](https://en.wikipedia.org/wiki/Rhetorical_question) (2认同)
  • @BenSchwehn`!`忽略映射.它清楚地写在文档中.读`:h:norm` (2认同)

Mar*_*rth 6

:%s/.\{,10}\zs.*//
Run Code Online (Sandbox Code Playgroud)
  • :%s/:将替换应用于所有行
  • .\{,10}:匹配任何东西多达10次(贪婪)
  • \zs:表示比赛的开始
  • .*:匹配线的其余部分
  • /:第一部分的结尾 :s
  • /:第二部分结束s(因为两者之间没有任何东西/,替换为空,即删除)