abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 22:22 | Komunita

Společnost Purism představila kryptografický token Librem Key. Koupit jej lze za 59 dolarů. Token byl vyvinut ve spolupráci se společností Nitrokey a poskytuje jak OpenPGP čipovou kartu, tak zabezpečení bootování notebooků Librem a také dalších notebooků s open source firmwarem Heads.

Ladislav Hagara | Komentářů: 0
včera 20:33 | Nová verze

Společnost NVIDIA oficiálně vydala verzi 10.0 toolkitu CUDA (Wikipedie) umožňujícího vývoj aplikací běžících na jejich grafických kartách. Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
včera 20:00 | Upozornění

Příspěvek Jak přežít plánovanou údržbu DNS na blogu zaměstnanců CZ.NIC upozorňuje na historicky poprvé podepsání DNS root zóny novým klíčem dne 11. října 2018 v 18:00. Software, který nebude po tomto okamžiku obsahovat nový DNSSEC root klíč, nebude schopen resolvovat žádná data. Druhým důležitým datem je 1. února 2019, kdy významní výrobci DNS softwaru, také historicky poprvé, přestanou podporovat servery, které porušují DNS standard

… více »
Ladislav Hagara | Komentářů: 4
včera 15:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 156. brněnský sraz, který proběhne v pátek 21. září od 18:00 v restauraci Na Purkyňce na adrese Purkyňova 80.

Ladislav Hagara | Komentářů: 0
včera 13:22 | Nová verze

Alan Griffiths z Canonicalu oznámil vydání verze 1.0.0 display serveru Mir (GitHub, Wikipedie). Mir byl představen v březnu 2013 jako náhrada X serveru a alternativa k Waylandu. Dnes Mir běží nad Waylandem a cílen je na internet věcí (IoT).

Ladislav Hagara | Komentářů: 0
20.9. 22:00 | Nasazení Linuxu
Stabilní aktualizace Chrome OS 69 (resp. Chromium OS), konkrétně 69.0.3497.95, přináší mj. podporu linuxových aplikací. Implementována je pomocí virtualizace, a proto je tato funkce také omezena na zařízení s dostatkem paměti a podporou hardwarové akcelerace, tudíž nejsou podporovány chromebooky s 32bitovými architekturami ARM, či Intel Bay Trail (tzn. bez Intel VT-x).
Fluttershy, yay! | Komentářů: 5
20.9. 21:32 | Zajímavý projekt
Došlo k uvolnění linuxové distribuce CLIP OS, vyvíjené francouzským úřadem pro kybernetickou bezpečnost ANSSI, jako open source. Vznikla za účelem nasazení v úřadech, kde je potřeba omezit přístup k důvěrným datům. Je založená na Gentoo.
Fluttershy, yay! | Komentářů: 1
20.9. 16:00 | Komerce

Zjistěte více o bezpečné a flexibilní architektuře v cloudu! IBM Cloud poskytuje bezpečné úložiště pro Vaše obchodní data s možností škálovatelnosti a flexibilitou ukládání dat. Zároveň nabízí prostředky pro jejich analýzu, vizualizaci, reporting a podporu rozhodování.

… více »
Fluttershy, yay! | Komentářů: 12
20.9. 12:22 | Nová verze

V dubnu letošního roku Mozilla představila webový prohlížeč pro rozšířenou a virtuální realitu Firefox Reality (GitHub). V úterý oznámila vydání verze 1.0. Ukázka na YouTube. Firefox Reality je k dispozici pro Viveport, Oculus a Daydream.

Ladislav Hagara | Komentářů: 2
20.9. 12:00 | Komunita

V srpnu loňského roku společnost Oracle oznámila, že Java EE (Enterprise Edition) bude uvolněna jako open source. O měsíc později bylo rozhodnuto, že tato open source Java EE bude přejmenována a předána Eclipse Foundation. Nové jméno bylo oznámeno v únoru letošního roku. Z Java EE se stala Jakarta EE. Eclipse Foundation včera oznámila dosažení dalšího milníku. Zdrojové kódy aplikačního serveru GlassFish jsou již k dispozici v git repozitářích Eclipse Foundation (GitHub).

Ladislav Hagara | Komentářů: 0
Na optické médium (CD, DVD, BD aj.) jsem naposledy vypaloval(a) data před méně než
 (13%)
 (14%)
 (21%)
 (23%)
 (25%)
 (4%)
 (1%)
Celkem 384 hlasů
 Komentářů: 33, poslední 16.9. 11:55
Rozcestník

Dotaz: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}

25.4.2017 18:26 perl
sed nahrazeni textu $VAR$ za obsah ${VARIABLE}
Přečteno: 315×
Nemohu prijit nato jak donutit sed aby udelal nahrazeni textu $VAR$ za obsah promenne VARIABLE.
VARIABLE=aaa
sed -e "s/\$VAR\$\/${VARIABLE}/g" /tmp/text.txt

Odpovědi

25.4.2017 19:48 Lyco | skóre: 12 | blog: Lyco
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}
VARIABLE=aaa vytvoří proměnnou shellu, kterou programy z shellu spuštěné nevidí. Zkus
export VARIABLE=aaa
sed -e "s/\$VAR\$\/${VARIABLE}/g" /tmp/text.txt
Příspěvek se rázem stává až o 37,5 % pravdivější, je-li pod ním napsáno reálné jméno.
25.4.2017 22:22 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}
Technická poznánmka: na tohle není potřeba, aby byla ta proměnná exportovaná, protože expanzi proměnné provede už shell ještě před tím, než předá parametr příkazu sed.
25.4.2017 23:46 Andrej | skóre: 45 | blog: Republic of Mordor | Zürich
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}

To je nesmysl. Zaprvé, sed žádnou proměnnou nepotřebuje vidět, protože ji expanduje přímo shell do toho argumentu sedu. Zadruhé, i kdyby ji sed viděl ve svém environment poli (3. argument main() atd. atp.), nikdy by ji nepoužil, protože sed prostě a jednoduše nikdy žádné proměnné prostředí neexpanduje, dolar neinterpretuje jako začátek názvu proměnné atd. atp. Není to shell.

ǑǦŹǓǕǙǞǺǨȞȬḔḦḰḾṊṎṸẄẌỖ
25.4.2017 20:19 Kit | skóre: 42 | Brno
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}
Místo uvozovek je nutné ve vzorku použít apostrofy:
VARIABLE=aaa
sed -e 's/\$VAR\$\'"/${VARIABLE}/g" /tmp/text.txt
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
25.4.2017 21:24 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}
Nebo vyescapovat i to zpětně lomítko:

sed -e "s/\\\$VAR\\\$/${VARIABLE}/g" /tmp/text.txt

Což mě vede k druhé poznámce. sed výrazy, kde se z jakéhokoliv důvodu objevuje jakékoliv lomítko se blbě čtou, když se takže raději třeba:

sed -e "s@\\\$VAR\\\$@${VARIABLE}@g" /tmp/text.txt

resp. předchozí mix uvozovek třeba:

sed -e 's#\$VAR\$#'"${VARIABLE}#g" /tmp/text.txt
25.4.2017 22:29 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}

Pořád máte problém, pokud hodnota té proměnné bude obsahovat oddělovač. Takže abrakadabra…

  sed -re "s/\\\$VAR\\\$/${VARIABLE//\//\\/}/g"

A teď ještě ošetřit věci typu "\1", "&", a to už snad bude všechno. :-)

25.4.2017 22:33 Kit | skóre: 42 | Brno
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}
Rozbalovat ve skriptu do regulárního výrazu jakýkoli řetězec od uživatele je vždy o držku (a programátorovi přes držku).
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
25.4.2017 22:35 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}
Tady se expanduje do replacement stringu, ne do regulárního výrazu.
25.4.2017 23:42 RM
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}
To platí jen v shellu, protože je to makro jazyk. V Perlu je to normální věc a programátoři se za to netlučou.
26.4.2017 15:28 Kit | skóre: 42 | Brno
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}
Předpokládal jsem, že se bavíme o shellu. Perl neřeším.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
25.4.2017 23:33 RM
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}
To už se vám tam nevejde. Já bych to udělal POSIXově a oddělil si to. Tady už to chce velkou opatrnost:
replace="bar\1&\nfoo//"
unsedvar="$(printf '%s' "$replace" | sed 's|\\|\\\\|g ; s|/|\\/|g ; s|&|\\&|g')"
sed 's/\$VAR\$/'"$unsedvar/g" file.txt
26.4.2017 00:00 Andrej | skóre: 45 | blog: Republic of Mordor | Zürich
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}

Já bych netrval na sedu. Nacpat obsah proměnné do příkazu sedu s sebou vždycky nese riziko, že v ní budou znaky, které sed zmatou. Připomíná to kdysi populární SQL injection útoky. :-) Co třeba tohle?

export VARIABLE='>>>///ble;ble///<<<'
awk '{gsub(/\$VAR\$/, ENVIRON["VARIABLE"]); print $0}'

Tady^^^ může $VARIABLE obsahovat, co chce. Testovací vstup:

something $VAR$ ble
$VAR$$$$VAR$ blabla
Karlovy $VAR$y
00$VAR$1
$VAR$$VAR$

Vrací mi to tohle, což by snad i docela šlo:

something <<<///ble;ble///>>> ble
<<<///ble;ble///>>>$$<<<///ble;ble///>>> blabla
Karlovy <<<///ble;ble///>>>y
00<<<///ble;ble///>>>1
<<<///ble;ble///>>><<<///ble;ble///>>>
ǑǦŹǓǕǙǞǺǨȞȬḔḦḰḾṊṎṸẄẌỖ
26.4.2017 00:02 Andrej | skóre: 45 | blog: Republic of Mordor | Zürich
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}

Tedy, tomu awk se samozřejmě dá ten vstupní soubor, buď jako argument nebo na standardní vstup.

ǑǦŹǓǕǙǞǺǨȞȬḔḦḰḾṊṎṸẄẌỖ
26.4.2017 00:13 RM
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}
sedu s sebou vždycky nese riziko, že s v ní budou znaky

Nenese, sed má jen ty tři & \ a použitý oddělovač, jinak je to bezpečné, co já vím. U toho awku vám bude stejně vadit minimálně &, což je speciální znak substituce awku.
26.4.2017 16:00 Andrej | skóre: 45 | blog: Republic of Mordor | Zürich
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}

No jo, bude se tam muset dát ${VARIABLE//&/\\&} (přiřadit do jiné proměnné prostředí nebo tak).

ǑǦŹǓǕǙǞǺǨȞȬḔḦḰḾṊṎṸẄẌỖ
26.4.2017 16:04 Andrej | skóre: 45 | blog: Republic of Mordor | Zürich
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}

Což stále neřeší VARIABLE='\&', protože výsledek "\\&" pochopí awk jinak, než bylo zamýšleno. Takže by se to muselo oescapovat úplně a pořádně.

ǑǦŹǓǕǙǞǺǨȞȬḔḦḰḾṊṎṸẄẌỖ
Josef Kufner avatar 26.4.2017 16:08 Josef Kufner | skóre: 68
Rozbalit Rozbalit vše Re: sed nahrazeni textu $VAR$ za obsah ${VARIABLE}
A co když $VARIABLE bude obsahovat lomítko?

Pokaždé, když takovýto dotaz vidím, říkám si, co to zas kdo dělá za ptákovinu?

První věc, co je potřeba udělat, když narazíš na takovýto komplikovanější problém, je zahodit shell a napsat to v něčem rozumném – třeba v Pythonu, PHP, Perlu,… je to jedno. Obvykle si tím člověk ušetří kopec starostí s krajními případy a navíc bude mít k dispozici pořádné datové struktury.

Shell je dobrý na slepení pár příkazů. Na cokoliv komplikovanějšího je to ztráta času.
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.