【问题标题】:How can I reorder parts of text with a find and replace in vi(m)?如何使用 vi(m) 中的查找和替换重新排序部分文本?
【发布时间】:2011-06-19 09:13:26
【问题描述】:

我有这种格式的数据:

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/

或者类似的东西,但我不确定。这种搜索/替换可能吗?如果是这样,有没有好心人赐教?

【问题讨论】:

    标签: search replace vi


    【解决方案1】:

    当然可以。

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

    我更改了以下内容:

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

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

    【讨论】:

    • 这太棒了,谢谢。我在谷歌上搜索了一个小时或更长时间,没有任何运气。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2019-02-25
    • 2011-05-26
    相关资源
    最近更新 更多