【问题标题】:sed or awk multiline replacesed 或 awk 多行替换
【发布时间】:2011-01-23 12:59:37
【问题描述】:

我正在尝试将格式附加到所有 /* 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; /* TODO :
               - include libraries
               ...
            */
  foobar();
  /* TODO : fix missing {'s */

与:

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>

【问题讨论】:

  • 为什么要在代码中插入 html-tags?正在使用语法荧光笔?
  • 是的 - 我只是很难把它变成多行>_
  • int void main是什么意思?

标签: sed awk multiline


【解决方案1】:
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>

【讨论】:

  • 只是旁注:'' 然后在顶部使用 css 部分会更好(“stylewise”:))。
  • 我必须有这个的内联样式。 ; )
  • 我不知道 GAWK 但是,这不起作用,所以我不会接受它作为答案。我最终使用了一个非常长的正则表达式来确保非贪婪匹配和 ruby​​ 的 gsub 函数。
  • 什么不起作用??简单地说“不起作用”并没有多大帮助。
猜你喜欢
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2016-03-13
  • 1970-01-01
  • 2020-10-29
  • 2017-06-16
  • 1970-01-01
相关资源
最近更新 更多