在多个文件中更改年份

时间:2015-01-14 14:36:11

标签: regex sed

我尝试使用sed来更新一堆文件中的日期。

此处列出了版权部分的外观

Copyright 2015
CopyRight 2012, 2015 
copyright 2011-2012 
CopyRight   2014

我想将其更改为

Copyright 2015

CopyRight 2011-2015

这是我到目前为止所拥有的

sed -i 's/copyright[\s]*(2015)?([0-9]*).*//I'

问题是在替换中使用了捕获量。我想在&#34行中做点什么;如果第1组是匹配,什么都不做,如果第2组匹配,用\ 2-2015替换#34;

2 个答案:

答案 0 :(得分:2)

仅针对列出的示例,以下内容似乎与预期结果相符:

sed 's/\(copyright.*\)201[01234]$/\12015/Ig'

如果您的版权自200年以来甚至19年开始运行,那么该表达式将与2015年未结束的每一行版权相匹配。您将不得不调整此正则表达式。

顺便说一句,试试这个,只要忘记sed的-i开关

答案 1 :(得分:0)

据我了解你想要

  • word word Copyright xxxx word替换为word word Copyright 2015 word;
  • word word Copyright xxxx<date_separator>yyyy word替换为word word Copyright xxxx<date_separator>2015 word

这需要一个“不匹配”的条件,这在sed中有点尴尬,所以这个文本转换最好写成sed脚本而不是单行。 / p>

#!/usr/bin/sed -f
/copyright\s\+\([0-9]\{4\}[, -]\+\)[0-9]\{4\}/I{
    s/copyright\s\+\([0-9]\{4\}[, -]\+\)[0-9]\{4\}/Copyright \12015/i;
};
/copyright\s\+\([0-9]\{4\}[, -]\+\)[0-9]\{4\}/I!{
    s/copyright\s\+[0-9]\{4\}/Copyright 2015/i;
}