Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim vi只保留列的前10个字符_Vim_Awk_Sed - Fatal编程技术网

Vim vi只保留列的前10个字符

Vim vi只保留列的前10个字符,vim,awk,sed,Vim,Awk,Sed,如何在vi中实现这一点 awk -F"," awk '{print substr($1,1,10)}' 我只想保留日期列的前10个字符(示例2014-01-01),不包括时间戳 我尝试在awk中执行此操作,但出现以下错误: sed: RE error: illegal byte sequence 我认为这是bash_配置文件设置错误 这是我在bash_档案中的内容: #export LANG=en_US.UTF-8 #export LOCALE=UTF-8 export LC_CTYPE=

如何在vi中实现这一点

awk -F"," awk '{print substr($1,1,10)}'
我只想保留日期列的前10个字符(示例2014-01-01),不包括时间戳

我尝试在awk中执行此操作,但出现以下错误:

sed: RE error: illegal byte sequence
我认为这是bash_配置文件设置错误

这是我在bash_档案中的内容:

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

export LC_CTYPE=C
export LANG=C
在vim中,执行以下操作:

:%norm! 11|D
这将影响缓冲区中的所有行

如果您愿意,
:s
也可以做这项工作

:%s/.\{,10}\zs.*//

  • :%s/
    :将替换应用于所有行
  • \{,10}
    :匹配任何内容最多10次(贪婪)
  • \zs
    :表示匹配的开始
  • *
    :匹配行的其余部分
  • /
    :s
  • /
    s
    第二部分的结尾(由于两个
    /
    之间没有任何内容,请用“无”替换,即删除)

对于编辑文本块,有一个
--可视块--
模式,可通过
CTRL-V
访问(在Windows上通常
CTRL-Q
)。然后您可以按d键删除所选内容

或者使用简单的替换命令

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

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

这将取代前三行。

在哪里指定列?@jxn上面的命令中有一个幻数
11
。这可能意味着什么?也许在给定的上下文中,
10l
11 |
更容易,这是非常有用的。。。我不敢相信我没有用那么多,只是因为我忘了这个:-o@BenSchwehn
忽略映射。它清楚地写在文件中。阅读
:h:norm
极不可能
awk
产生错误消息
sed:RE-error:invalical byte sequence
。清理您的问题以确保准确,并显示示例输入和预期输出。为什么要在
vi
中执行此操作?如果您的区域设置有问题,可以尝试
LC_ALL=C awk'{print substr($0,1,10)}文件>输出。