Ich versuche, eine mathematische Operation mit sed durchzuführen , aber meine Variablen werden weiterhin als Zeichenfolgen behandelt. Die Eingabe ist von dieser Art:
$echo 12 | sed 's/[0-9]*/&+3/'$ 12+3
Ich möchte 15 als Ausgabe haben. Ich muss die Operation ausführen und ihr mathematisches Ergebnis in nur einem Durchgang ersetzen, da ich das Programm als Python-Daemon ausführe und Passagen wie das Umleiten von stdout vermeiden möchte auf Dateien, öffnen Sie diese Dateien, führen Sie Operationen aus, extrahieren Sie das Ergebnis, führen Sie die Ersetzung durch. Für mich sed scheint das Beste zu sein, alles in einer Zeile auszuführen.
Ich habe versucht, sowohl die Eingabe als auch die Ausgabe auf verschiedene Weise umzuwandeln, z. B.
$echo 12 | sed 's/[0-9]*/int(&+3)/'$ echo 12 | sed 's/[0-9]*/int(&+3)/'$ echo 12 | sed 's/[0-9]*/int(&+3)/' aber das Ergebnis war immer ein Ausdruck des zweiten Feldes.
Akzeptierte Antwort:
Wenn Sie ernsthaft sed verwenden möchten, dann ist dies der richtige Weg:
s/[0-9]/<&/gs/0//g; s/1/|/g; s/2/||/g; s/3/|||/g; s/4/||||/g; s/5/|||||/g; s/6/||||||/gs/7/|||||||/g; s/8/||||||||/g; s/9/|||||||||/g:Zehner/|<||||||||||/gt Zehner//gs/+//g:Minus/|- |/-/gt minuss/-$//:backs/||||||||||/ Eingabe:
1+2100+250100-250 Ausgabe:
3350-150 Ihre Mission, sollten Sie sich entscheiden, sie anzunehmen, ist es, die Multiplikation zu implementieren.