我想在许多文件中更新源代码的许可证标题中的年份。 我正在写bash sript。但是 sed 命令无效。特别是,正则表达式无法匹配并替换所需的单词。
示例:mycode.h
<Some Multi Line text>
Copyright 2002-2014 Utkrist Adhikari
<Some Multi Line text>
假设我想在2015年之前取代2014年( END_DATE = 2015 )。我试图用以下命令实现它:
sed -i -r "s/\(Copyright.*\)-[ ]*[0-9]+[ ]*\( Utkrist Adhikari\)/\1$END_DATE\2/" mycode.h
OR
sed '/Copyright/,/Peter Baumann/ {s/-[ ]*[0-9]+[ ]*/$END_DATE/}' $file
基本上,我正在尝试匹配
我想用变量 END_DATE
的内容替换中间部分答案 0 :(得分:1)
你可以尝试下面的GNU sed命令,
$ END_DATE=2015; sed -r "s/^(Copyright\s*[0-9]{4}-)[0-9]{4}(\s*Utkrist\s*Adhikari)/\1$END_DATE\2/g" file
<Some Multi Line text>
Copyright 2002-2015 Utkrist Adhikari
<Some Multi Line text>
答案 1 :(得分:1)
sed -r "s/^(Copyright 2002-)[0-9]{4}( Utkrist Adhikari)$/\1$END_DATE\2/" mycode.h
答案 2 :(得分:0)
以下是使用awk
awk '/Copyright/ {sub(/-[0-9]*/,"-2015")}1' file
<Some Multi Line text>
Copyright 2002-2015 Utkrist Adhikari
<Some Multi Line text>
当数据来自变量时:
END_DATE=2015
awk -v d="$END_DATE" '/Copyright/ {sub(/-[0-9]*/,"-"d)}1' file
<Some Multi Line text>
Copyright 2002-2015 Utkrist Adhikari
<Some Multi Line text>