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í.