![Code mit sed umgestalten](https://rvso.com/image/76408/Code%20mit%20sed%20umgestalten.png)
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 .\>
old
new
cold
$ 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, -i
wenn Sie möchten, dass die Datei direkt geändert wird, anstatt sie auf stdout zu drucken.
WARNUNG: Dieses sed
Skript ä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