Code mit sed umgestalten

Code mit sed umgestalten

Wie schreibe ich ein Sed-Skript, das eine Zeichenfolge einer Datei neu anordnet/umgestaltet?

Der Inhalt meiner Datei ist:

    for(int i=0; i<old(a, 10); i++)
    {
      sum += old(c*c, i*a)
    }

Und ich möchte, dass der geänderte Inhalt so aussieht:

    for(int i=0; i<new(10,0,a); i++)
    {
      sum += new(i*a, c*c)
    }

Antwort1

Das Folgende funktioniert mit GNU sed– es nutzt die Wortgrenzmarkierungen \<und , um sicherzustellen, dass es sich nur in ändert , wenn es ein eigenständiges „Wort“ ist und nicht nur als Teil eines Wortes eingebettet ist, wie .\>oldnewcold

$ sed -e 's/\<old\>/new/g' foo.c 
    for(int i=0; i<new(a, 10); i++)
    {
      sum += new(c*c, i*a)
    }

Verwenden Sie die Option von GNU sed, -iwenn Sie möchten, dass die Datei direkt geändert wird, anstatt sie auf stdout zu drucken.

WARNUNG: Dieses sedSkript ändertALLEVorkommen von /\<old\>/in der Quelldatei. Dies kann viel mehr sein, als Sie ändern möchten.

Antwort2

gnu sed:

/bin/sed -ire \
 's!\<old\(([^)]+), *([^) ][^)]*)\)!new(\2, \1)!g' \
 *.c </dev/null

verwandte Informationen