sed或awk多行替换

sed或awk多行替换,sed,awk,multiline,Sed,Awk,Multiline,我正在尝试将格式附加到所有/*TODO:…*/标签,但我在多行区域遇到问题。我可以做单线sed;但是对于多行sed和awk,我不知道 我该怎么做?我对任何一种都持开放态度。 这是我到目前为止所拥有的 sed 's/\/\/\*[ \t]*TODO[ \t]*:.*/*\//<span style="color:#aaaaaa;font-weight:bold;">&</span>/g' 与: int void main ( int h, char * argv[

我正在尝试将格式附加到所有/*TODO:…*/标签,但我在多行区域遇到问题。我可以做单线sed;但是对于多行sed和awk,我不知道

我该怎么做?我对任何一种都持开放态度。 这是我到目前为止所拥有的

sed 's/\/\/\*[ \t]*TODO[ \t]*:.*/*\//<span style="color:#aaaaaa;font-weight:bold;">&</span>/g'
与:

int void main ( int h, char * argv[] )
  int a, b; <span style="color:#aaaaaa; font-weight:bold;">/* TODO :
               - include libraries
               ...
            */</span>
  foobar();
  <span style="color:#aaaaaa; font-weight:bold;">/* TODO : fix missing {'s */ </span>
int void main(int h,char*argv[])
int a,b;/*待办事项:
-包括图书馆
...
*/
foobar();
/*TODO:修复缺少的{s*/
gawk'开始{
RS=“*/”
replace=“”
}
/\/\*+待办事项/{
gsub(/\/\*+TODO/,替换“/*TODO”)
RT=RT“”
}
{打印$0RT}
"档案"
输出

$ ./shell.sh
int void main ( int h, char * argv[] )
  int a, b; <span style="color:#aaaaaa; font-weight:bold;"> /* TODO :
               - include libraries
               ...
            */</span>

  foobar();
  <span style="color:#aaaaaa; font-weight:bold;"> /* TODO : fix missing {'s */</span>
$。/shell.sh
int void main(int h,char*argv[])
int a,b;/*待办事项:
-包括图书馆
...
*/
foobar();
/*TODO:修复缺少的{s*/

为什么要在代码中插入html标记?使用语法高亮显示?是的-我只是很难将其设置为多行>\u
int void main
的含义是什么?就像旁注一样:'',然后在页面上使用css部分会更好(“样式”:)我不知道GAWK,但是,这不起作用,所以我不接受它作为答案。我最后用了一个很长的正则表达式来确保非reedy匹配和ruby的gsub函数。什么不起作用?简单地说“不起作用”没有多大帮助。
gawk 'BEGIN{
  RS="*/"
  replace="<span style=\"color:#aaaaaa; font-weight:bold;\">"
}
/\/\* +TODO/{
    gsub(/\/\* +TODO/,replace" /* TODO")
    RT=RT "</span>"
}
{ print $0RT}
' file
$ ./shell.sh
int void main ( int h, char * argv[] )
  int a, b; <span style="color:#aaaaaa; font-weight:bold;"> /* TODO :
               - include libraries
               ...
            */</span>

  foobar();
  <span style="color:#aaaaaa; font-weight:bold;"> /* TODO : fix missing {'s */</span>