Portál AbcLinuxu, 1. května 2025 07:00

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
4.9.2011 14:15 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Odpovědět | Sbalit | Link | Blokovat | Admin
Pěkný, ale přidal bych ještě příkaz t [label] - skočí na label (nebo na konec, když label chybí), pokud byla poslední substituce úspěšná. To se hodí když např. chci ze souboru ostranit nějaké řádky podle nějakého regexpu:
sed -n 's/...//;t;p;'
SPD vůbec není proruská
4.9.2011 14:24 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě

Abych se přiznal, tak zrovna tenhle příkaz mi není moc jasný. Teprve až ho pochopím, tak ho určitě přidám. Jinak díky.

4.9.2011 20:43 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Zde dochází na to, že sed toho vlastně umí více, než je často vidět ve skriptech. sed -ne 's/...//;t;p;' zrovna není štastný příklad, protože téhož asi raději dosáhneme čitelnějším: sed -e '/.../d'. Ale jsou situace, kdy se hodí. b je prostý skok, t skok podmíněný (nahrazení s proběhlo od začátku zpracování toho řádku). Do téhle kategorie patří i "hold space" (g, G, h, H, x) a možnost spojovat řádky na vstupu (N).

Pravdou nicméně je, že když na tyto prostředky dojde, možná je na čase zvážit jiný nástroj (třeba awk). sed sice mnoho dokáže, ale složitější konstrukce se dle mého špatně čtou. Takže pro pobavení/potěšení stojí za to zkusit čistě sed řešení problému, ale nemusí to být nutně řešení nejpraktičtější.

Čeho bych se raději vyvaroval (prostě je to nepěkná forma (a trochu plýtvání prostředky) jsou pekelné roury tak časté v mnoha skriptech: grep ... | awk ... | sed ... | grep -v ... | tr ... | ... v libovolných sekvencích a opakováních. Všechny tyto úkony je lépe svěřit jednomu sed nebo awk skriptu.

Pokud máte rád knihy a hezky utříděné informace: <http://oreilly.com/catalog/9781565922259>.
4.9.2011 20:53 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě

Díky

xkucf03 avatar 5.9.2011 00:10 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Čeho bych se raději vyvaroval (prostě je to nepěkná forma (a trochu plýtvání prostředky) jsou pekelné roury tak časté v mnoha skriptech: grep ... | awk ... | sed ... | grep -v ... | tr ... | ... v libovolných sekvencích a opakováních. Všechny tyto úkony je lépe svěřit jednomu sed nebo awk skriptu.

Z hlediska výkonu souhlas – ale co se týče přehlednosti, tak IMHO bude většinou vycházet líp, rozdělit to na víc menších srozumitelných částí, než jeden ultimátní skript. Jasně, dá se okomentovat, ale pokud to někdo píše na jednu řádku, tak mi přijdou přehlednější ty roury.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
5.9.2011 00:37 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Pravda, tohle jsem nenapsal zcela jasně. Mám na mysli skript, kde bych to měl obecně nalámat pro lepší čitelnost. Co si člověk napíše na řádku (a nikdo ani on sám to po sobě nebude muset louskat), je mnohem volnější žánr. :)
4.9.2011 18:10 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Odpovědět | Sbalit | Link | Blokovat | Admin

Hezká ukázka toho, jak může být sed užitečný (nastavení dynamického linkeru, který má gcc používat).

4.9.2011 20:31 anonym
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Odpovědět | Sbalit | Link | Blokovat | Admin
Hezke shrnuti. Musim ale rict, ze od doby co jsem se trochu naucil perl, mi uz sed prijde torchu zbytecny - musim si pamatovat dalsi prepinace, specificky druh regexpu atd.

No, mozna to stejne nekdy vyuziju, kdyz nebude nainstalovany perl.
David Watzke avatar 4.9.2011 20:46 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
sed nepoužívá specifický druh regexpů, to spíš Perl má svoje rozšíření :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
12.9.2011 09:20 CEST
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
sed nepoužívá specifický druh regexpů, to spíš Perl má svoje rozšíření :-)
Tak tak, ale PCRE ma "hezci" syntaxi. Obvykle musim v sedu psat spoustu zpetnych lomitek v regexpech. Navic, kdyz uz umim perl, da se pouzit jako grep, sed, awk a neco navic (ikdyz awk toho umi taky dost).
12.9.2011 10:11 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Obvykle musim v sedu psat spoustu zpetnych lomitek v regexpech.

Protože z historických důvodů používá Basic RE. U GNU sedu to řeší přepínač -r

4.9.2011 20:54 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě

Děkuju za ocenění.

5.9.2011 12:02 jeleniste | skóre: 13 | blog: Prokustovo lože
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Odpovědět | Sbalit | Link | Blokovat | Admin
Príma
Nejsem blbý, jen se hloupě ptám
5.9.2011 13:23 jeleniste | skóre: 13 | blog: Prokustovo lože
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Odpovědět | Sbalit | Link | Blokovat | Admin
jo, šikovnej je taky přepínač -i, kterym se přepíše původní soubor.
Nejsem blbý, jen se hloupě ptám
pavlix avatar 5.9.2011 13:59 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Používám téměř denně, mimojiné na zónové soubory DNS.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
David Watzke avatar 5.9.2011 14:11 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Jojo, já taky, ale poděl je, že zruší symlink a udělá z něj normální soubor. Řešením by mělo být --follow-symlinks.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
pavlix avatar 5.9.2011 14:29 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Jojo, já taky, ale poděl je, že zruší symlink a udělá z něj normální soubor. Řešením by mělo být --follow-symlinks.
To bych neviděl jako problém :), ale proti --follow-symlinks nic nemám.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
David Watzke avatar 5.9.2011 18:15 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Je to docela problém, když máš třeba vhosty apache v /etc/apache2/sites-available a v sites-enabled pouze odkazy na ty povolený a pak se rozhodneš in-place editovat soubor přes symlink... Podle mě by --follow-symlinks měla být implicitní volba. Ale důležitý je hlavně o tomto vědět, pak si na to člověk dá bacha.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
5.9.2011 18:42 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
To je imho kvůli standardu. Standard nic jako --follow-symlinks pochopitelně neobsahuje a gnu nástroje mají být (afaik) nadmnožinou standardu, takže odtud takovéhle podivnosti. Je bohužel mnohem jednoduší přidat si vlastní extension než snažit se pohnout se standardem, ačkoli by to bylo v tomhle i mnoha dalších případech lepší.
pavlix avatar 5.9.2011 21:09 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Já na takovéhle věci (například grep --color) používám aliasy. Funguje to a neovlivňuje to skripty.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
7.9.2011 22:33 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
To je imho kvůli standardu. Standard nic jako --follow-symlinks pochopitelně neobsahuje a gnu nástroje mají být (afaik) nadmnožinou standardu,

Požadavek, aby implementace byla nadmnožinou standardu, nijak nebrání tomu, aby si přidala další přepínače, které POSIX nepožaduje - což je ostatně i samotný -i (přesněji: všechny kromě -e, -f a -n).

7.9.2011 22:35 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Aha, trefil jsem se vedle. Ale i tady: vzhledem k tomu, že už samotný přepínač -i je GNU rozšířením, nelze default vysvětlovat POSIXem, ale jen zpětnou kompatibilitou.
7.9.2011 22:37 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Aha, mi uniklo že i -i není posix, no tak to je potom ještě blbější výmluva...
xkucf03 avatar 7.9.2011 23:26 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
V tom případě by se měly odkazy sledovat a opak by šlo nastavit přepínačem.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
pavlix avatar 5.9.2011 21:08 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Je to docela problém, když máš třeba vhosty apache v /etc/apache2/sites-available a v sites-enabled pouze odkazy na ty povolený a pak se rozhodneš in-place editovat soubor přes symlink...
Stačí nelézt, kam nemáš :).
Podle mě by --follow-symlinks měla být implicitní volba.
Podle mě spíše ne. Mám radši, když nástroje dělají přesně to, co jim řeknu.
Ale důležitý je hlavně o tomto vědět, pak si na to člověk dá bacha.

Tak.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
xkucf03 avatar 5.9.2011 21:23 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Mám radši, když nástroje dělají přesně to, co jim řeknu.
No právě – proto bych tady spíš čekal, že dojde k úpravě souboru (ne navíc ke smazání odkazu a uložení obyčejného souboru místo něj). Argument s kompatibilitou beru – ale logičtější by to bylo takhle.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
pavlix avatar 5.9.2011 21:42 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
o právě – proto bych tady spíš čekal, že dojde k úpravě souboru (ne navíc ke smazání odkazu a uložení obyčejného souboru místo něj). Argument s kompatibilitou beru – ale logičtější by to bylo takhle.
Mno mě to přijde logičtější naopak. Protože kdyby sed tu volbu neměl, soubor bych si přejmenoval, dal ho sedu na vstupu a výstupu dal jeho původní jméno. Měl bych tedy stejný výsledek, jako má sed -i, proto mi to přijde přirozenější.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
xkucf03 avatar 5.9.2011 21:52 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Ale zase kdybys to otevřel v kterémkoli jiném editoru (vim, emacs, mcedit, kate, gedit, jedit…), jak by se to chovalo? :-)
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
pavlix avatar 6.9.2011 05:26 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Nesmíš se nechat zmást tím, že to má v názvu ed.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
xkucf03 avatar 6.9.2011 09:32 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Jednou je to stream editor, tak je to stream editor :-)

A nejde jenom o editory – ty symbolické odkazy respektuje prakticky každý program – nebo když do toho odkazu nasměruji standardní výstup (třeba příkazu echo ahoj), tak se taky zapíše skrze odkaz do cílového souboru – nepřepíše se ten odkaz obyčejným souborem.

Navíc sed zachovává přístupová práva – taky proto bych čekal, že zachová symbolický odkaz.

Zajímavě se to chová taky při použití pevných odkazů:
$ echo 111 > soubor1.txt
$ ln soubor1.txt soubor2.txt 
$ sed -i s/1/2/g soubor2.txt 
$ cat soubor2.txt
222
$ cat soubor1.txt
111
Opět to původní soubor smaže a vytvoří úplně nový – místo aby to editoval „na místě“ v tom stejném souboru.

Beru to prostě jako záludnost, na kterou je potřeba si dávat pozor, nějakou logiku v tom ale nevidím (kromě té snahy o kompatibilitu, což už jsem tu psal).
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
pavlix avatar 6.9.2011 12:30 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Jo, jenže ty se zaměřuješ na slovo editor, které je spíše nadsázkou, zatímco já si plně uvědomuju slovo stream.
Navíc sed zachovává přístupová práva – taky proto bych čekal, že zachová symbolický odkaz.
Navrácení přístupových práv je bezpečné, u toho následování linků si tak jistý nejsem.
Opět to původní soubor smaže a vytvoří úplně nový – místo aby to editoval „na místě“ v tom stejném souboru.
On sed je proudový, takže by bylo dost zvláštní, kdyby něco editoval opravdu na místě.
Beru to prostě jako záludnost, na kterou je potřeba si dávat pozor, nějakou logiku v tom ale nevidím (kromě té snahy o kompatibilitu, což už jsem tu psal).
Kompatibilita je pouze zachvávání určitého stavu, ne jeho vytváření :).
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
6.9.2011 12:32 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Jednou je to stream editor, tak je to stream editor :-)
Tak tak, nikoli file editor :p ;-)

Nadruhou stranu souhasím, že když in-place, tak teda in-place, čili jako každá jiná slušná utilita...
pavlix avatar 6.9.2011 12:48 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Já to in-place nikdy nebral tak úplně in-place vzhledem k souboru, jako spíš vzhledem k aktuálnímu adresáři, kde hromadnou editaci provádím. Záleží na úhlu pohledu.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
5.9.2011 21:39 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Jojo, já taky, ale poděl je, že zruší symlink a udělá z něj normální soubor. Řešením by mělo být --follow-symlinks.
Nebo použít ed. Poštvat ho na daný soubor k editaci a instrukce mu nakrmit na standardní vstup (třeba pomocí here documents) ;)
5.9.2011 22:52 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Jo. Právě na tohle ed používám. Viz můj postarší manuálek pro ed na wikibooks. Zrovna se mi nedávno hodil.
5.9.2011 14:48 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě

Díky

12.9.2011 09:22 CEST
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě
Odpovědět | Sbalit | Link | Blokovat | Admin
zajimave prikazy jsou take "h"/"H' a "g"/"G" - kopirovani textu mezi pattern space a hold space
12.9.2011 10:09 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: sed -- poznámky (nejen) pro mě

Díky

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.