Regex sed正则表达式匹配不工作

Regex sed正则表达式匹配不工作,regex,bash,sed,Regex,Bash,Sed,我想在许多文件中更新源代码的许可证标题中的年份。 我正在为此编写bash sript。但是,sed命令不起作用。特别是,正则表达式无法匹配和替换所需的字 示例:mycode.h <Some Multi Line text> Copyright 2002-2014 Utkrist Adhikari <Some Multi Line text> 或 基本上,我正在努力匹配 行首版权 -[optional\u spaces]一些\u整数[optional\u spaces]

我想在许多文件中更新源代码的许可证标题中的年份。 我正在为此编写bash sript。但是,sed命令不起作用。特别是,正则表达式无法匹配和替换所需的字

示例:mycode.h

<Some Multi Line text>
Copyright 2002-2014 Utkrist Adhikari
<Some Multi Line text>

基本上,我正在努力匹配

  • 行首版权
  • -[optional\u spaces]一些\u整数[optional\u spaces]介于两者之间
  • [one_space]Utkrist Adhikari在这一行的末尾

然后我想用变量的内容替换中间部分END\u DATE

您可以尝试下面的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>
$END_DATE=2015;sed-r“s/^(版权所有\s*[0-9]{4}-[0-9]{4}(\s*Utkrist\s*Adhikari)/\1$END\u DATE\2/g”文件
版权所有2002-2015 Utkrist Adhikari

这里有一个使用
awk

awk '/Copyright/ {sub(/-[0-9]*/,"-2015")}1' file
<Some Multi Line text>
Copyright 2002-2015 Utkrist Adhikari
<Some Multi Line text>
awk'/Copyright/{sub(/-[0-9]*/,“-2015”)}1'文件
版权所有2002-2015 Utkrist Adhikari
当数据来自变量时:

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>
结束日期=2015年
awk-vd=“$END_DATE””/Copyright/{sub(/-[0-9]*/,“-“d)}1”文件
版权所有2002-2015 Utkrist Adhikari

@AvinashRaj是的,我已经编辑了描述。谢谢
sed -r "s/^(Copyright 2002-)[0-9]{4}( Utkrist Adhikari)$/\1$END_DATE\2/" mycode.h
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>