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 17:11 | Komunita

Byly zveřejněny videozáznamy přednášek z Fedora 26 Release Party konané 10. srpna v Praze.

Ladislav Hagara | Komentářů: 0
včera 15:33 | Komunita

Přesně před čtyřiadvaceti lety, 16. srpna 1993, oznámil Ian Murdock vydání "Debian Linux Release".

Ladislav Hagara | Komentářů: 3
včera 06:00 | Bezpečnostní upozornění

Ve virtualizačním softwaru Xen bylo nalezeno a opraveno 5 bezpečnostních chyb XSA-226 až XSA-230. Nejzávažnější z nich XSA-227 (CVE-2017-12137) umožňuje eskalaci privilegií a ovládnutí celého systému, tj. správce hostovaného systému se může stát správcem hostitelského systému.

Ladislav Hagara | Komentářů: 1
15.8. 22:00 | Zajímavý projekt

V roce 2013 proběhla na Kickstarteru úspěšná kampaň na podporu otevřeného Dobře temperovaného klavíru (Well-Tempered Clavier). Stejný tým s Kimiko Išizaka spustil před týdnem na Kickstarteru kampaň Libre Art of the Fugue na podporu svobodného Umění fugy.

Ladislav Hagara | Komentářů: 2
15.8. 13:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 143. brněnský sraz, který proběhne v pátek 18. srpna od 18:00 hodin ve sportovním areálu a restauraci BeachPub Sokolák u Brněnské přehrady aneb v hantecu u Prýglu.

Ladislav Hagara | Komentářů: 0
15.8. 10:55 | Nová verze

Byla vydána (pdf) verze 3 průběžně aktualizované (rolling release) linuxové distribuce Solus (Wikipedie). Ke stažení je v edicích Budgie, GNOME a MATE. Z novinek lze zmínit například podporu snapů. Solus 3 obsahuje Firefox 55.0.1, LibreOffice 5.4.0.3, Rhythmbox 3.4.1 nebo Thunderbird 52.2.1. Edice Budgie a GNOME přichází s GNOME MPV 0.12. Edice MATE s VLC 2.2.6.

Ladislav Hagara | Komentářů: 5
14.8. 21:44 | Nová verze

Po více než roce vývoje od vydání verze 1.0 Microsoft oznámil vydání verze 2.0 platformy .NET Core (GitHub). Přehled novinek v poznámkách k vydání a ve videu na Channel 9.

Ladislav Hagara | Komentářů: 0
14.8. 21:11 | Pozvánky

Před dvaceti lety, 15. srpna 1997, poslal Miguel de Icaza do diskusního listu GTK+ email, který je považován za zahájení projektu GNOME. Linux Desktop Meetup pořádá oslavu ve středu 16. srpna od 19:00 v brněnském Charlie's square.

Ladislav Hagara | Komentářů: 18
14.8. 11:55 | IT novinky
Na šampionátu The International 2017 byl představen bot, který poráží profesionální hráče počítačové hry Dota 2. Bot zatím umí jenom zápasy 1v1. Vývojáři pracují na podpoře 5v5. Jedná se o společný projekt organizace OpenAI a společnosti Valve. Více na stránkách OpenAI a na YouTube. Dle Elona Muska je elektronický sport mnohem komplexnější než šachy nebo go [Hacker News].
Ladislav Hagara | Komentářů: 14
14.8. 05:55 | Nová verze

Byla vydána verze 20.0 a krátce na to opravná verze 20.0.1 svobodného softwaru OBS Studio (Open Broadcaster Software, Wikipedie) určeného pro streamování a nahrávání obrazovky počítače. Přehled novinek i s náhledy a animovanými gify v příspěvku na blogu.

Ladislav Hagara | Komentářů: 0
Těžíte nějakou kryptoměnu?
 (4%)
 (2%)
 (17%)
 (77%)
Celkem 339 hlasů
 Komentářů: 21, poslední 13.8. 09:57
    Rozcestník

    Dotaz: sed +promenna

    20.3.2011 16:51 thinkdeep
    sed +promenna
    Přečteno: 665×
    zdravim, chtel bych se zeptat jestli je nejaka moznost jak si v sedu ulozit nalezeny vzorek a pak ho pouzit napr: mám nejakou vetu: testovaci věta je toto. a nad kazdym radkem souboru mam posloupnost prikazu sed -e "s/blabla/" a v jednu chvili potrebuju najit vzorek věta a nahradit ho napr. světak ...takze světak

    je tedy nejak mozne uprostred sedu si vzorek ulozit do promene nb ho primo prenest do prostred vkladane substituce? děkuji

    co sem zatim tak zkousel je sed -e "s/promena=....vzorek pro hledani..../....1/2vzorku `$promena` 2/2vzorku.../g"

    Řešení dotazu:


    Odpovědi

    20.3.2011 17:05 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna

    Ten popis je dost zmatený, ale patrně vám jde o zpětnou referenci. V tomto nejjednodušším případě

      sed -e 's/regex/s&k/'
    
    20.3.2011 17:22 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    presne tohle jsem mel na mysli, mockrat dekuju :)) nejjednodussi reseni byvaji nejlepsi :D jeste jednou dik
    20.3.2011 18:22 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna

    a muzu se jeste zeptat kdyz mam haldu vnitrnich prikazu -e jestli to muzu nejak psat na vice radku a ne na jeden za sebou...

    prípadne jestli kdyz spustim sed -e ....-e .... s explicitnim netisknutim a na dalsi radek dalsi sed -e se zbylými prikazy, tak bude ten druhej sed provadet upravy na puvodnim souboru, nebo uz na tom predspracovanym?

    Díky za odpoved
    20.3.2011 18:34 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna

    1. Continuation line (to je záležitost shellu, ne sedu):

      sed -e '...' \
        -e '...' \
        -e '...'
    

    2. Jestli myslíte

      ... | sed -e '...' | sed -e '...'
    

    tak tam druhý sed pochopitelně zpracovává až výstup toho prvního (nic jiného ani nedostane).

    20.3.2011 19:59 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    no pouzil jsem obe varianty :))

    ted me vrta hlavou jak regularnim vyrazem popsat smesici velkych pismen, cisel a podtrzitka napr ASV_4R OC4X RT_W apod. nejak mi sed nechce brat [:upper:]
    20.3.2011 20:07 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna

    [[:upper:][:digit:]_]+

    Tedy alespoň pro extended regular expressions (u GNU sedu přepínač -r). Pro basic regular expressions by mělo stačit dát před plus backslash, ale stoprocentně jistý si nejsem.

    20.3.2011 20:35 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna

    potrebuju aby to bylo co nejvic prenositelny, ale i tak to [[:upper:][:digit:]_]+ nefunguje..ani s -r a ani s \+

    :(:( ale jestli jsem dobre pochopil syntaxi tak by mozna slo [[A-Z][0-9]_]\+ nebo se pletu?
    20.3.2011 21:09 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna
    Spíš [A-Z0-9_]\+
    21.3.2011 07:31 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: sed +promenna
    A ověřit že je v locales nějaké rozumné řazení, tuhle se tu zrovna někdo divil.
    LC_COLLATE=C sed ...
    Možná když jde o tu přenositelnost tak nějaký starší sed by to mohl brát z LANG či LC_ALL, nevím.
    21.3.2011 08:40 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna

    jo tohle dost pomohlo, porad mam problem ze ikdyz pouziji

    LC_COLLATE=C sed -e "s/[A-Z0-9_]\{2,\}/bla bla & bla bla/g"

    tak mi to krome smyslenych vzorku typu ASV_4R OC4X RT_W najde i posloupnosti cisel..coz nechci

    kazda rada draha :))
    21.3.2011 08:53 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna
    V tom případě budete muset upřesnit, co chcete. Požadavku "smesici velkych pismen, cisel a podtrzitka" totiž vyhovuje i posloupnost číslic. Např. pokud by požadavkem bylo, aby nezačínala číslicí (obvyklé u identifikátorů), stačilo by '[A-Z_][A-Z0-9_]*'
    21.3.2011 09:11 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    Asi jsem se spatne vyjadril :)

    Tedy jedna se mi o konstanty, tudiz predpokladejme ze zadna nezacina cislem

    napriklad NULL ...posloupnost velkych pismen

    nebo ARCH_SET_FS ...kombinace s podtrzitky

    pripadne s cisly ...ale ted me tak napada nejsem si jistej jestli sou tam i dvojciferny cisla ...ale to neresi to ze mi to vybira i cisla uplne jiny .... ale mozna by to slo resit tim ze bych to rozepsal -> dá se v sedu v regularnim vyrazu psat nebo?? jako svislice? ze bych napsat s/[A-Z_]\{2,\} | [A-Z_]\+[0-9] atd...
    21.3.2011 09:28 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna
    Tedy jedna se mi o konstanty, tudiz predpokladejme ze zadna nezacina cislem

    V tom případě máte řešení v minulém příspěvku. Pokud chcete napsat něco jiného, budete muset napsat co. Nejsme jasnovidci, abychom poznali, co asi tak můžete chtít, když to nenapíšete.

    dá se v sedu v regularnim vyrazu psat nebo?? jako svislice?

    Co si takhle přečíst specifikaci?

    21.3.2011 09:50 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna

    V tom případě máte řešení v minulém příspěvku.

    omlouvam se prehlidl jsem ... po uprave na [A-Z_][A-Z0-9_]\{2,\} to snad pojme vsechny varianty :)

    Co si takhle přečíst specifikaci?

    specifikaci? zkousel jsem to hledat v manualu ale bez zdarneho vysledku O=)
    21.3.2011 10:22 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna

    mohl bych se jeste zeptat v pripade te zpetne reference &, jde pouzit jen cast?

    dejme tomu ze mam nejaky vzorek ale potrebuju z nej pouzit jen cast, napriklad bez prvniho, resp. posledniho znaku (poctu znaku) ...na príkladu světak z toho potrebuju dostat jen věta, nebo spis prakticky nahradit s a k jinymi znaky(retezci)

    snad je srozumitelne co potrebuji :)

    21.3.2011 10:26 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna
    Ano, lze. Ale už mne nebaví převypravovat vám tady návody, které jste líný si přečíst sám.
    21.3.2011 12:01 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna

    hmm... mozna na tom neco je, ale at hledam jak hledam, stale nenachazim :-( jediny co me napadlo je konstrikce:

    sed -e "s/regex/neco neco ${&%(} neco neco/g"

    coz by z nalezeneho vyrazu melo odstrihnout levou kulatou zavorku, ale nejak jsem to nezprovoznil :-(

    21.3.2011 12:44 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna

    A co tohle?

      s/regexp/replacement/
           Attempt  to match regexp against the pattern space.  If success‐
           ful,  replace  that  portion  matched  with  replacement.    The
           replacement may contain the special character & to refer to that
           portion of the pattern space  which  matched,  and  the  special
           escapes  \1  through  \9  to refer to the corresponding matching
           sub-expressions in the regexp.
    
    21.3.2011 14:19 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    to jsem zkousel ale nejak mi to nefunguje jak ma :( pokud mam sed -r "s/ (([a-z][a-z0-9_]*)\()/ neco \2 neco /g" tak mi to sice najde spravne slovo zacinajici m. pismenem a obsahujici m. pismena,cisla a "_" a koncici "(", ALE nahradi to tim stejnym vyrazem, coz jestli jsem to pochopil dobre, by melo vznechat tu zavorku "(" pred kterou je "\". uz opravdu nevim
    21.3.2011 14:36 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    chyba odhalena :)))
    Řešení 1× (thinkdeep (tazatel))
    21.3.2011 14:42 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna

    Mně to funguje správně:

    mike@lion:~> sed -r "s/ (([a-z][a-z0-9_]*)\()/ neco \2 neco /g"
    f1(a) + f2(b)
    f1(a) + neco f2 neco b)
    

    Co to vrátí vám?

    21.3.2011 15:46 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna

    jj, tohle mi uz taky funguje, nevsiml jsem si ze v replacement se odkazuji dvakrat a po vsech zkouskach sem jednou nahradil jako \2 ale jedou jsem tam zapomnel & ...

    ted me spis dojimá v

    LC_NUMERIC=C sed -e "s/[[:digit:]][,)]/ neco & neco /g"

    coz by ve vstupnim textu melo najit cislo nasledovane carkou nebo zavorkou, coz se taky deje, JENZE kdyz mam treba 0) 0, -1, tak mi to u tý -1 neoznaci tu carku...
    21.3.2011 15:59 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna

    jo jasne -r :))

    neni jeste nejaky jednoduchy zpusob jak vypreparovat prave ten rozdil mezi \1 a \2 ?
    21.3.2011 16:02 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna

    Na tohle LC_NUMERIC mít vliv nebude, rozlišování tříd znaků se děje podle LC_CTYPE.

    Mimochodem, když vidím, co provádíte, nechcete se rovnou podívat na (f)lex?

    21.3.2011 16:38 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    No flex neni vsude... navic uz mam vetsinu udelanou sedem... a to s tou -1 a 0, resp. "," a ")" jsem vyresil rozdelenim do dvou prikazu... (ale mozna se na ten flex jeste kouknu)
    21.3.2011 16:59 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna
    Problém s -1 je hlavně v tom, že to není '[[:digit:]]' (ani '[[:digit:]]+'). To byste musel použít '-?[[:digit:]]+'.
    21.3.2011 17:17 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    no mě to tu -1 najde bez problemu, ten se zacne vyskytovat teprve az v kombinaci s 0 za nimiz potrebuju oddelit carku nebo zavorku, ale ktere ke spravnemu nalezeni musim uvest ve vzorku regex ... je to zamotany...nakonec sem to nejak rozkouskoval a uvidim nakolik to bude prenositelny a funkcni na ruznych vstupech :-)
    21.3.2011 17:01 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna
    A co se (f)lexu týká, tak ten generuje C zdroják, takže na cílovém stroji (kde se to bude spouštět) ho nepotřebujete.
    21.3.2011 17:19 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    dokonce tak...no ja potrebuju aby to fungovalo ve skriptu..tak flex necham na jindy :) ale díky moc
    21.3.2011 12:07 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: sed +promenna
    V manuálu sedu si zjistěte jak se přepínají základní a rozšířené regulární výrazy, což bude pro začátek stačit.

    Pro to co potřebujete hledejte (jinde) informace o regulárních výrazech, často označovaných zkratkou regexp (regular expression). Existují specifikace, návody, tutoriály, online testovací nástroje...

    Také se zajímejte o drobné nuance specifické pro sed.
    21.3.2011 08:50 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna
    Správně by to mělo být tak, že při '[[:upper:]]' se uplatní LC_CTYPE a při '[A-Z]' LC_COLLATE. LC_ALL je ale samozřejmě jistota.
    22.3.2011 13:51 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    Mohl bych mit jeste otazecku? Pokud mam v promene rekneme $2 (nactene z prikazove radky) a chtel bych podle teto promene najit nejaky radek..nad nimz ale provest uplne jinou substituci, ..staci na to jeden sed? mam na mysli neco jako sed -e "najdi radek s $2" pak pokracuj substituci -e "s/neco/neco/1" nebo tohle neni mozne? dekuji.
    Řešení 1× (thinkdeep (tazatel))
    22.3.2011 14:01 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna

    Teď mi není jasné, co úplně přesně chcete, ale jestli jde o to, aby se substituce provedla jen na řádcích obsahujících vzorek $2, tak

      sed -e "/$2/ s/pattern/replacement/"
    

    Ale je potřeba ošetřit situaci, kdy by $2 obsahoval lomítko. Jestli jsem něco nepřehlédl, v bashi by mohlo stačit

      sed -e "/${2//\//\\/}/ s/pattern/replacement/g"
    
    22.3.2011 14:39 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    Jo presne tohle jsem mel na mysli.

    No vyskyt lomitka resit nemusim, to tam urcite nebude, ale i tak pri pouziti

    sed -e "/$2/ s/pattern/replacement/" tohle hlasí syntaktickou chybu a v prípade ..$2 /s/... to oznaci a nahradi i radky bez vzorku $2..
    22.3.2011 14:42 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna
    Jakou syntaktickou chybu? Nesmíte zapomínat, že i v tomto případě se vzorek (oba vzorky) pořád chápe jako regulární výraz.
    22.3.2011 15:53 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna

    jo, to chapu, ale kdyz mam:

    ahoj ahoj ahoj cau ahoj nazdar

    ahoj ahoj ahoj cau ahoj cau

    a sed -e "/$2/ s/pattern/replacement/ kde $2 je nazdar, pattern je cau, a replacement je taky ahoj

    tudiz sed -e "/nazdar/ s/cau/ahoj/g" by mi melo vstup predelat na:

    ahoj ahoj ahoj ahoj ahoj nazdar

    ahoj ahoj ahoj cau ahoj cau

    problem je v tom ze vsechny "cau" tedy pattern jsou zmeneny na replacement, bez ohledu na vyskyt toho $2

    tak nevim kde je chyba :-(

    22.3.2011 16:36 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna

    Z toho, co píšete (a hlavně co nepíšete0, těžko hádat, kde děláte chybu, ale prostě to funguje:

    mike@lion:~> sed -e "/nazdar/ s/cau/ahoj/" <<EOT
    ahoj ahoj ahoj cau ahoj nazdar
    > ahoj ahoj ahoj cau ahoj cau
    > EOT
    ahoj ahoj ahoj ahoj ahoj nazdar
    ahoj ahoj ahoj cau ahoj cau
    

    Hint: příště nepište "ono to nefunguje", ale raději zcela konkrétně napište, co jste zkusil, jak to dopadlo a případně jak si myslíte, že to mělo dopadnout.

    23.3.2011 10:11 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    No je to nejaky divny. Asi mi nejak stagnuje linux(ubuntu-navirtualizovany)nebo co, nejak me to nechce poslouchat...,jinak tenhle priklad mi fakt nejede ani spustenej z prikazovy radky, hodi mi to nejakou chybu syntaxe zase. Ale zkusil jsem to na FreeBSD a tam to jede jak ma, máte pravdu.

    Nic mene ted se mi to uplne slozilo a ani ten skript nemuzu rozjet :-( pise mi to bash: ./skript.sh: /bin/bash^M: chybny interpretr: Adresar nebo soubor neexistuje

    a ikdyz zmenim bash za sh, tak nechapu kde se tam bere ^M
    23.3.2011 10:48 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna
    Používáte editor, který jako oddělovač používá CRLF (jak je zvykem v DOSu a Windows) místo samotného LF (jak je zvykem v unixových systémech). Většinou je to jedno, ale u skriptů to vadí. Podívejte se, jestli máte v systému utilitku unix2dos, a pokud ano, použijte ji.
    Řešení 1× (thinkdeep (tazatel))
    23.3.2011 10:50 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: sed +promenna
    To ^M je CR, Wndows používají jako oddělovač řádků CRLF, linux jen LF, takže přebytečný CR zlásí jako znak ^M. Interpertr /bin/bashCR pak opravdu neexistuje. Zkuste na soubor aplikovat jeden z příkazů:
    dos2unix skript.sh
    sed -i -e 's/$/\r/' skript.sh
    tr -d \\r < skript.sh > skipt2.sh
    Děkuji že jste mě opět obšťastnil hláškou "hodi mi to nejakou chybu syntaxe zase", ale hlavně že vám to teda alespoň na FreeBSD funguje.
    23.3.2011 11:05 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    Jo to me nenapadlo,...sice sem to cely psal v linuxu, ale tim se to bylo ve sdileny slozce s win, a tim ze sem si to musel poslat misto namountovat se to asi prepsalo...
    dos2unix skript.sh
    tohle funguje

    a to s tim

    Děkuji že jste mě opět obšťastnil hláškou "hodi mi to nejakou chybu syntaxe zase", ale hlavně že vám to teda alespoň na FreeBSD funguje.
    na to sem odpovidal na konci

    dnes 10:23 thinkdeep Re: sed +promenna Odpovědět | Označit jako řešení | Sbalit | Výše | Link | Blokovat | Admin

    Chapu, chapu...ten problem sem preskocil kdyz mi to jede na jinym stroji, kdezto tady ne. tedy: sed: -e vyraz c.1, znak 2: nadbytecne znaky po prikazu dulezitejsi, je proc nemuzu spustit ten skript vubec, ...to je tak kdyz aktualizuju system aniz by to bylo potreba :/ uz mi nejdou ani namountovat slozky

    23.3.2011 11:21 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: sed +promenna
    Oprava, sed měl být:
    sed -i -e "s/\r//" skript.sh
    to výše uvedené dělá přesný opak :)
    23.3.2011 06:05 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: sed +promenna
    Napadá mne jen možnost že $2 neobsahuje "nazdar", ale je prázdné, přestože si třeba myslíte opak. Potom by sed použil nahrazení na všechny řádky.

    Bude lepí když vždy pošlete výpis z terminálu co vám to udělalo a komentář co to dělat mělo, pokud je to možné. Tyhle slovní popisy toho co děláte jsou dost náchylné k chybné interpretaci a často je copy&paste z terminálu i rychlejší.
    23.3.2011 06:13 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: sed +promenna
    tohle hlasí syntaktickou chybu

    To je jako když blondýna řekne "auto nestartuje" ale už neřekne, že na palubním počítači je nápis "nedostatek paliva".

    Napsat JAKOU syntaktickou chybu to hlásí je zcela zásadní, nenapsat je naopak neodpustitelný hřích ;)
    23.3.2011 10:23 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    Chapu, chapu...ten problem sem preskocil kdyz mi to jede na jinym stroji, kdezto tady ne. tedy: sed: -e vyraz c.1, znak 2: nadbytecne znaky po prikazu

    dulezitejsi, je proc nemuzu spustit ten skript vubec, ...to je tak kdyz aktualizuju system aniz by to bylo potreba :/ uz mi nejdou ani namountovat slozky

    23.3.2011 11:10 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: sed +promenna
    Už jsem ztratil nit čeho se to týkalo, ale pokud je to něco jako:
    echo $dva
    nazdar
    bash$ LC_MESSAGES=C sed -e "/$dva/ s/cau/ahoj/" <<EOT
    ahoj ahoj ahoj cau ahoj nazdar
    ahoj ahoj ahoj cau ahoj cau
    EOT
    sed: -e expression #1, char 2: extra characters after command
    a zkoušel jste to v nějakém skriptu a ne přímo v příkazové řádce, tak to může souviset s těmi nadbytečnými CR, pokud se tam na koncích řádků motají. Příklad je jen ilustrativní, reálně mi to žádnou chybu nehází.
    23.3.2011 11:19 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    BOZE :D zrejme v LC_MESSAGES=C byl zakopan pes :)) jeste to zkusim v tom skriptu :)
    23.3.2011 11:22 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: sed +promenna
    To asi ne, to jen mění jazyk ve kterém vám sed bude vypisovat chybové hlášky. Většina lidí na ty české není zvyklá a tak jim buď moc nerozumí, nebo nechce rozumět :)
    23.3.2011 12:18 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna
    Spíš bych tipoval, že kolega (ne)použil LC_MESSAGES=C na ten příkaz, jehož výstup pak parsoval sedem.
    23.3.2011 12:49 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    Ahaa...koukam uz vim proc se mi to jednou podarilo :))

    Problem je trosku jinde...kdyz zadam to natvrdo co chci hledat, tedy nazdar, tak mi to najde, ale kdyz pomoci promene $2, tak uz ne...

    a promenou sem si nechal vypsat, takze vim, ze v ni je to co potrebuji...takze kdyz tam necham promenou vypisuje mi sed(ve skriptu):

    -e expression #1, char 0: no previous regular expression

    resp. sed: -e vyraz c. 1, znak 0: zadny predchazejici regularni vyraz

    ale(mimo skript)

    thinkdeep@ThinkDeepers:~$ echo $promena

    nazdar

    thinkdeep@ThinkDeepers:~$ LC_MESSAGES=C sed -e "/$promena/ s/cau/ahoj/" << baf

    > ahoj ahoj ahoj cau ahoj nazdar

    > ahoj ahoj ahoj cau ahoj cau

    > baf

    ahoj ahoj ahoj ahoj ahoj nazdar

    ahoj ahoj ahoj cau ahoj cau

    23.3.2011 12:51 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna
    Takhle se asi nikam nedostaneme… zkuste sem dát jako přílohu ten skript, který vám nefunguje.
    Řešení 1× (thinkdeep (tazatel))
    23.3.2011 13:04 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: sed +promenna
    To je zase jiná hláška, tu umím taky :)
    bash$ sed -e "// s/cau/ahoj/" <<EOT
    ahoj ahoj ahoj cau ahoj nazdar
    ahoj ahoj ahoj cau ahoj cau
    EOT
    
    sed: -e expression #1, char 0: no previous regular expression
    nebylo by možné, že v té proměnné přecejen nic není (je prázdná)? Nemáte ten sed třeba v nějaké funkci? Ta má vlastní lokální číselné proměnné, nepřebírá ty globální...
    23.3.2011 13:41 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    Smekám :)) genius :D fakt ze jo, tohle jsem nevedel, myslel jsem ze je to pro cely skript jednotny...

    vse funguje jak ma :) tedy na mim linuxu, ted to pujdu testovat na FreeBSD ..takze si moc nefandim :D

    btw. je mi trochu zahadou jak se mohli soubory vytvorene v linuxu(ukladane do win) prepsat i pres to ze nebyli pod win otevreny, ale uz si to budu pamatovat pro priste :))
    23.3.2011 13:46 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: sed +promenna
    Jen pro upřesnění: $2 není proměnná, ale poziční parametr. Proměnné sdílí funkce se zbytkem skriptu, pokud nejsou explicitně deklarovány jako lokální (pomocí local). Oproti tomu poziční parametry ve funkci reprezentují parametry, se kterými byla volána funkce, ne parametry, se kterými byl volán skript.
    26.3.2011 10:36 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    Vím, ze je to trosku off-topic, ale mam problem s porad s tim skriptem...

    pod linuxem/centOS mi to jede v poradku, ale pod FreeBSD mi to dela psí kusy :-/

    uresneni problemu: prochazi i funkce, ktere by podle switche nemel prochazet

    FreeBSD

    eva ~/.../...> ./hltrace.sh -h  #toto by melo vypisovat napovedu
    + getopt -o hs: -n hltrace -- -h   #zpracovani parametru
    + TEMP=' -- hs: -n hltrace -- -h'
    + [ 0 != 0 ]
    + eval set -- ' -- hs: -n hltrace -- -h'
    + set -- -- hs: -n hltrace -- -h
    + true
    + shift
    + header   #tady uz se to chova divne
    + echo '...'
    ...
    + #dalsi prikazy uvnitr fce ktera vubec nema byt vykonavana
    + tail
    + echo '...'
    ...
    + break
    eva ~/.../...>

    Linux

    thinkdeep@ThinkDeepers:~/..$ ./hltrace.sh -h
    + ./hltrace.sh -h
    + getopt -o hs: -n hltrace -- -h
    + TEMP= -h --
    + [ 0 != 0 ]
    + eval set --  -h --
    + set -- -h --
    + true
    + echo    #spravna funkce
    ...vypis napovedy..
    thinkdeep@ThinkDeepers:~/..$
     

    Skript>
    #!/bin/sh
    set -x
    TEMP=`getopt -o hs: \-n 'hltrace' -- "$@"`
            
    if [ $? != 0 ] ; then echo "Use   ./hltrace.sh -h   for usage" >&2 ; exit 1 ; fi
    eval set -- "$TEMP"
    header () {....}
    ..dalsi funkce...
    while true ; do
            case "$1" in
                    -h|-H) echo "napoveda..." ; shift ; break ;;
                    -s|-S) header ; promena="$2" ; fce... ; shift 2 ; break ;;
                    --) shift ; header ; fce ; tail ; break ;;
                    *) exit 1 ;;
            esac
    done
    

    nejaky napad?

    26.3.2011 10:55 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: sed +promenna
    První rozdíl je v hodnotě TEMP, v linuxu to do TEMP přiřadi výsledek volání getopt, ve FreeBSD to vypadá, že jen ten řetězec. Prověřte co je doopravdy přiřazeno v TEMP, správné fungování fce getopt a funkci zpětných apostrofů (`) (zvažte přejít na POSIX kompatibilní formu $(...) místo starší `...`).
    26.3.2011 11:41 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    hm, hm..

    skript1

    TEMP=`getopt -o hs: \-n 'hltrace' -- "$@"`
    if [ $? != 0 ] ; then echo "Use   ./hltrace.sh -h   for usage" >&2 ; exit 1 ; fi
    echo "$TEMP" ; exit 1 ;
    

    vystup FreeBSD

    eva ~/..> ./hltrace.sh -h
    + getopt -o hs: -n hltrace -- -h
    + TEMP=' -- hs: -n hltrace -- -h'
    + [ 0 != 0 ]
    + echo ' -- hs: -n hltrace -- -h'
     -- hs: -n hltrace -- -h
    + exit 1
    eva ~/..>

    vystup Linux

    + ./hltrace.sh -h
    + getopt -o hs: -n hltrace -- -h
    + TEMP= -h --
    + [ 0 != 0 ]
    + echo  -h --
     -h --
    + exit 1

    opravdu se tedy obsah promene lisi, ale pokud pouziji co jste psal (tedy jestli jsem to spravne pochopil)

    TEMP=$(getopt -o hs: \-n 'hltrace' -- "$@")

    tak

    + getopt -o hs: -n hltrace -- -h
    + TEMP=' -- hs: -n hltrace -- -h'
    + [ 0 != 0 ]
    + echo ' -- hs: -n hltrace -- -h'
     -- hs: -n hltrace -- -h
    + exit 1
    
    

    tak je vystup obdobny se mi zna
    26.3.2011 14:21 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: sed +promenna
    Tak já příště zdůrazním, že analýza problému má probíhat v pořadí, v jakém ty body uvádím tedy TEMP, getopt, $() nakonec :)
    27.3.2011 09:19 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    To sem ted nejak nepochopil O=)
    26.3.2011 13:50 thinkdeep
    Rozbalit Rozbalit vše Re: sed +promenna
    nakonec sem to vyresil pomoci getopts :) a funguje to jak na linuxu tak na FreBSD :))

    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.