更改多个文件中的年份
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;
}
我正在尝试使用 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;
}