Search 如何在vi(m)中使用find和replace对部分文本进行重新排序?

Search 如何在vi(m)中使用find和replace对部分文本进行重新排序?,search,replace,vi,Search,Replace,Vi,我有以下格式的数据: 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/ 或者类似的东西,但我不确定。是否可以进行此搜索/替换?如果是这样的话,有人能开导我

我有以下格式的数据:

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/

或者类似的东西,但我不确定。是否可以进行此搜索/替换?如果是这样的话,有人能开导我吗?

当然有可能

:%s+\([0-9]\{2\}\)/\([0-9]\{2\}\)/\([0-9]\{4\}\)+\3/\1/\2+
我更改了以下内容:

  • 我没有使用斜杠来分隔替换命令的各个部分,而是使用了
    +
    符号。分隔符不必是正斜杠。在
    %s
    后面放置的任何符号都将成为分隔符。这很有用,因为我们需要在模式中使用前斜杠

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


  • 当然这是可能的

    :%s+\([0-9]\{2\}\)/\([0-9]\{2\}\)/\([0-9]\{4\}\)+\3/\1/\2+
    
    我更改了以下内容:

    • 我没有使用斜杠来分隔替换命令的各个部分,而是使用了
      +
      符号。分隔符不必是正斜杠。在
      %s
      后面放置的任何符号都将成为分隔符。这很有用,因为我们需要在模式中使用前斜杠

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


    太棒了,谢谢。我在谷歌上搜索了一个多小时,没有任何运气。再次感谢。太棒了,谢谢你。我在谷歌上搜索了一个多小时,没有任何运气。再次感谢。