我正在使用vi
编辑器,文件中有这样的数据。
05/08/2017,U,01,116326001
05/08/2017,U,01,116226001
05/08/2017,U,01,116726323
05/08/2017,U,01,116236001
我想替换日期(第一列)。
例如:05/08/2017
到04/03/2017
。
提前致谢。
答案1
Vi(或 Vim)内部:
:%s#^05/08/2017#04/03/2017#
您可能必须先按Esc才能退出插入模式。
就像在 中一样sed
,在使用该命令进行替换时,您可以选择任意字符作为模式分隔符s
。这里我选择的是#
.
由于 . ,模式 .^05/08/2017
将在行的开头匹配^
。这可以防止它意外匹配任何行中的其他位置。
使用通常的/
模式分隔符,我们得到了一个很好的例子,称为“牙签倾斜综合症”:
:%s/^05\/08\/2017/04\/03\/2017/
替换命令将在当前 Vi 缓冲区中的所有行上执行,因为我们%
在开始时使用“范围”(%
与 相同1,$
,即“从第一行到最后一行”)。
答案2
简单地与sed工具:
sed -i 's~^[0-9]*/[0-9]*~04/03~' file
-i
选项,就地修改文件
处理后的内容file
:
04/03/2017,U,01,116326001
04/03/2017,U,01,116226001
04/03/2017,U,01,116726323
04/03/2017,U,01,116236001
答案3
awk 选项:
awk -F, '{ printf "%s","04/03/2017";for (i=2;i<=NF;i++) {printf ",%s",$i } }' filename
打印want的日期,然后循环并打印由 , 分隔的剩余字段