更改多个文件中的年份

Changing the year in several files

我正在尝试使用 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'

问题是在替换中使用了大写字母。我想按照 "if group 1 is a match, do nothing, if group 2 matches, substitute with -2015"

行做一些事情

仅针对所列示例,以下似乎符合预期结果:

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

表达式匹配不以 2015 结尾的每一行版权,如果您拥有 运行 自 200. 甚至 19.. 以来的版权,您将不得不调整此正则表达式。

顺便说一句,要尝试这个,只需忘记 sed

的 -i 开关

据我了解你想要

  • 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

这需要一个 "does not match" 条件,这在 sed 中做起来有点笨拙,因此最好将此文本转换写成 sed 脚本而不是一行.

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