2010-03-04 165 views
6

我試圖將格式添加到所有/ * TODO:... * /標籤,但我在多行區域遇到問題。我可以做單行sed的;但對於多線sed和awk,我不知道。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> 
+0

你爲什麼要插入HTML標籤轉換成代碼?在語法熒光筆上工作? – akira 2010-03-04 04:08:07

+0

是的 - 我只是有麻煩得到它多行> _ < – 2010-03-04 04:46:16

+3

'int void main'的含義是什麼? – 2010-03-04 05:33:46

回答

4
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> 
+1

只是一個註釋:'',然後使用css部分ontop會更好(「stylewise」:))。 – akira 2010-03-04 10:18:20

+0

我必須爲這個內聯樣式。 ; ) – 2010-03-04 13:12:01

+0

我不知道GAWK,但這不起作用,所以我不會接受它作爲答案。我最終做了一個很長的REGEX來確保非真實匹配和ruby的gsub功能。 – 2010-03-09 18:42:54