2011-02-01 56 views
0

我有数据格式为:如何使用vi(m)找到并替换部分文本?

03/18/2010 
03/18/2010 
04/19/2010 

我想今年从每个日期字符串的结尾移动,一开始,像这样:

2010/03/18 
2010/03/18 
2010/04/19 

我需要查找/替换模式,将做到这一点。我以为我可能需要使用这样的符号:

:%s/'[0-9]\{2\}'\/'[0-9]\{2\}'\/'[0-9]\{4\}'/&3\/&1\/&2/ 

或沿着这些路线,但我只是不确定。此搜索/替换可能吗?如果是这样,有人会如此善待启迪我吗?

回答

3

当然这是可能的。

:%s+\([0-9]\{2\}\)/\([0-9]\{2\}\)/\([0-9]\{4\}\)+\3/\1/\2+ 

我改变了以下内容:

  • 代替使用斜线来替换命令的各部分之间分离的,我用+符号。分隔符不一定是正斜杠。无论您在%s成为分隔符后放入哪个符号。这很有用,因为我们需要在模式中使用正斜杠。

  • 我使用(转义)括号在正则表达式中创建组。这让我们可以通过使用反斜杠后面跟随组的编号来引用替换模式中的这些组。组从左到右编号,从1开始,组0是整个比赛。

+0

这是完全真棒,谢谢。我在没有任何运气的情况下搜索了一个小时或更长时间。再次感谢。 – Brian 2011-02-01 16:11:29