Snažím se provést matematickou operaci s sed
, ale nadále zachází s mými proměnnými jako s řetězci. Vstup je tohoto druhu:
$ echo 12 | sed 's/[0-9]*/&+3/'$ 12+3
Chtěl bych mít 15 jako výstup. Potřebuji provést operaci a nahradit její matematický výsledek pouze jednou pasáží, protože program spouštím jako démon Python a chci se vyhnout pasážím, jako je přesměrování stdout
na souborech, otevřít tyto soubory, provést operace, extrahovat výsledek, provést náhradu. Pro mě, sed
Zdá se, že nejlepší je provádět vše v jednom řádku.
Zkoušel jsem přenášet vstup i výstup různými způsoby, jako je
$ echo 12 | sed 's/[0-9]*/int(&+3)/'$ echo 12 | sed 's/[0-9]*/int(&+3)/'$ echo 12 | sed 's/[0-9]*/int(&+3)/'
ale výsledkem byl vždy tisk druhého pole.
Přijatá odpověď:
Pokud upřímně chcete používat sed, pak je to cesta:
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:desítka/|<||||||||||/gt desítka//gs/+//g:mínus/|- |/-/gt minuss/-$//:zpět/||||||||||/
Vstup:
1+2100+250100-250
Výstup:
3350-150
Vaším posláním, pokud se rozhodnete to přijmout, je implementovat násobení.