Bash 如何使用sed插入注释块

Bash 如何使用sed插入注释块,bash,sed,Bash,Sed,我正在用bash编程来修改C语言中构建的大量文件集合,我需要注释掉部分信息(/**/) 该行内容如下: *action.acroread:{APPMGR_acroread(“blah.pdf”);} 我想在{APPMGR…之前插入一个注释字符串“/**/”,并在行尾将其关闭 目前我有密码 for i_file in $file_list[@]}; do sed -i '/^*action.acroread/ s|.*|/* & */|' $i_file

我正在用bash编程来修改C语言中构建的大量文件集合,我需要注释掉部分信息(/**/)

该行内容如下: *action.acroread:{APPMGR_acroread(“blah.pdf”);}

我想在{APPMGR…之前插入一个注释字符串“/**/”,并在行尾将其关闭

目前我有密码

    for i_file in $file_list[@]}; do
        sed -i '/^*action.acroread/ s|.*|/* & */|' $i_file
        ...

    done
它在行首插入一个/*并在行尾插入一个*/对整行进行注释。它还可以防止在我多次运行脚本时添加多个注释块

我需要做的是在{APPMGR_acroread(“blah.pdf”);}前面添加/*并在行的末尾添加*/这样最终结果应该如下所示

*action.acroread: /* {APPMGR_acroread(“blah.pdf”);} */ 
到目前为止,我得到的是

sed -i ‘/^action.acroread/ s|.{APPMGR_acroread|/* & */|’ $i_file 
这将产生以下输出

*action.acroread:/*  {APPMGR_acroread */(“blah.pdf”);} 
此外,再次运行它会导致出现第二对注释块

*action.acroread:/* /*  {APPMGR_acroread */ */(“blah.pdf”);} 
每个文件中的blah.pdf都不同。(blah.pdf、blah2.pdf、blah3.pdf等)


除了防止多次运行脚本时出现多个注释块外,如何修改代码以仅注释块行的后半部分?谢谢。

sed
POSIX regex模式中,
*
是特殊的。您需要对它们进行转义。 此外,您还需要将需要保留的内容和需要用
/*…*/
包装的内容捕获到单独的组中

你可以用

sed-i'/^\(\*action\.acroread[^{]*\)\(.*\)/s | | | \1/*\2*/|“$i\u文件”
见:

s='line。。。
*action.acroread:{APPMGR_acroread(“blah.pdf”);}
另一行…'
sed'/^\(\*action\.acroread[^{]*\)\(.*\)/s||||\1/*\2*/|'这可能适合您(GNU-sed):


如果一行以
*action.acroread:
开头,则开头的
{
前面可能有3个字符,结尾的
}后面可能没有3个字符
无论哪种方式,都用第一个和第三个背面引用替换该行,第三个背面引用被
/*
*/

包围。谢谢您提供的详细信息,这成功了。@Strang84很高兴它对您有效。如果我的回答对您有帮助,也请联系我(请参阅)在达到15个代表点后,您有权获得向上投票的特权。请注意,您可以向上投票所有有帮助的答案。
s='line...
*action.acroread: {APPMGR_acroread("blah.pdf");}
another line...'
sed '/^\(\*action\.acroread[^{]*\)\(.*\)/ s||\1/* \2 */|' <<< "$s"
## => 
#    line...
#    *action.acroread: /* {APPMGR_acroread("blah.pdf");} */
#    another line...
sed -E 's#^(\*action\.acroread: )(...)?(\{.*\})(...)?#\1/* \3 */#' file