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