我尝试使用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;
答案 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;
}