GNU/Linux >> Znalost Linux >  >> Linux

Doplnění s „sed“?

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/| 

Vstup:

1+2100+250100-250 

Výstup:

3350-150 

Vaším posláním, pokud se rozhodnete to přijmout, je implementovat násobení.


Linux
  1. Nahraďte chytré uvozovky příkazem sed pro Linux

  2. Použití více vzorů najednou pomocí příkazu Sed

  3. Jak dosáhnout přenositelnosti pomocí Sed -i (úpravy na místě)?

  1. Používáte Sed se speciálními znaky?

  2. Barvení výstupu ocasu pomocí Sed?

  3. Jak odstranit znak \r pomocí sed

  1. Manipulace s textem na příkazovém řádku pomocí sed

  2. Jak rekurzivně nahradit znaky sed?

  3. Nula vyplňte čísla na 2 číslice se sed