2010-03-04 15 views
6

J'essaye d'ajouter la mise en forme à tous/* TODO: ... */tags, mais j'ai des problèmes dans la zone multi-ligne. Je peux faire une seule ligne sed; mais pour multiline sed et awk, je ne sais pas.sed ou awk multiline remplacer

Comment faire? Je suis ouvert à l'un ou l'autre. Voici ce que j'ai jusqu'ici.

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

remplacerons:

int void main (int h, char * argv[]) 
    int a, b; /* TODO : 
       - include libraries 
       ... 
      */ 
    foobar(); 
    /* TODO : fix missing {'s */ 

avec:

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

pourquoi voulez-vous insérer des balises html dans le code? travailler sur un surligneur de syntaxe? – akira

+0

yep - j'ai juste du mal à l'obtenir en multiline> _ < –

+3

Que veut dire 'int void main'? –

Répondre

4
gawk 'BEGIN{ 
    RS="*/" 
    replace="<span style=\"color:#aaaaaa; font-weight:bold;\">" 
} 
/\/\* +TODO/{ 
    gsub(/\/\* +TODO/,replace" /* TODO") 
    RT=RT "</span>" 
} 
{ print $0RT} 
' file 

sortie

$ ./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

juste comme un sidenote: '' et ensuite utiliser une section css ontop serait mieux ("stylewise" :)). – akira

+0

Je dois avoir des styles en ligne pour celui-ci. ; –

+0

Je ne connais pas GAWK mais, cela ne fonctionne pas, je ne l'accepterai pas comme réponse. J'ai fini par le faire avec un très long REGEX pour assurer des matchs non-grincheux et la fonction gsub de ruby. –