2016-07-29 16 views
1

Ich bin neu in sed und ich kann es nicht schaffen, es zu verwenden, um alle ";" Zeichen in Kommentaren von C++ - Dateien, dh Zeilen, die den String "//" beginnen oder enthalten (ich konvertiere bereits "/ * ... * /" Kommentare in "// ..." Kommentare).Entfernen Sie alle Vorkommen von ';' in C++ Kommentare mit SED

Zum Beispiel:

// lorem; ipsum ; test 
int a; // 1 ; 2 ; 3 ; 

Und ich mag haben:

// lorem ipsum test 
int a; // 1 2 3 

Für Kommentare in meinen C++ Dateien.

********* ********* EDIT

Hier ist eine Lösung mit SED in zwei Schritten. Eine Lösung mit AWK ist auch in Antworten verfügbar.

  1. Put alle Kommentare auf einer neuen Zeile: sed 's/\/\//\n\/\//g'
  2. entfernen ';' nur auf Zeilen beginnend mit "//": sed '/^\/\// s/;//g'

Antwort

0

Es ist einfach in AWK. Erstellen Sie eine Datei r.awk:

function process(s) { 
    gsub(";", "", s) 
    return s 
} 

{ 
    sep = "//"; ns=length(sep) 
    m = match($0, sep) 
    if (!m) {print; next} 

    body = substr($0, 1, m-1) 
    cmnt = substr($0, m+ns ) 

    print body sep process(cmnt) 
} 

Verbrauch:

awk -f r.awk input.file 
+0

Vielen Dank, es mit AWK in der Tat einfach ist. Ich schaffe es endlich, es mit SED in zwei Schritten zu tun: 1. Setzen Sie alle Kommentare auf eine neue Zeile: 'sed 's/\/\ // \ n \/\ // g'' 2. Entfernen' " nur auf Zeilen beginnend mit "//": 'sed '/^\/\ // s /; // g'' – Iwaa

Verwandte Themen