2010-03-04 22 views
6

Tüm/* TODO: ... */etiketlerine biçimlendirme eklemeye çalışıyorum, ancak çok çizgili alanda sorun yaşıyorum. Tek sıra sed yapabilirim; ama çok satırlı sed ve awk için bilmiyorum.sed veya awk multiline yerine

Bunu nasıl yaparım? Ben de açıkım. Şimdiye kadar sahip olduğum şeyler.

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

değiştirin: ile

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

neden koduna html etiketleri eklemek istiyorsun? bir sözdizimi vurgulayıcı üzerinde çalışıyor? – akira

+0

evet - sadece çok satırlı birime ulaşmakta sorun yaşıyorum> _ < –

+3

"Int void main" ifadesinin anlamı nedir? –

cevap

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

çıkışı

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

sadece bir sidenote olarak: '' ve daha sonra bir css bölümü kullanmak daha iyi olurdu ("stylewise" :)). – akira

+0

Bunun için satır içi stilleri olmalı. ; –

+0

GAWK'yı bilmiyorum ama bu işe yaramıyor, bu yüzden cevap olarak kabul etmeyeceğim. Nongreedy eşleşmeleri ve Ruby'nin gsub işlevini sağlamak için gerçekten uzun bir REGEX ile işi bitirdim. –