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

    dnes 17:00 | Bezpečnostní upozornění

    Ve správci balíčků APT, používaném v Debianu a odvozených distribucích, byla nalezena a opravena kritická zranitelnost CVE-2026-109518. Vzdálený útočník může obejít ověření stažených balíčků pomocí přesměrování a dočasných chyb HTTP serveru.

    Ladislav Hagara | Komentářů: 2
    dnes 13:11 | IT novinky

    Nejvyšší kontrolní úřad (NKÚ) vydal zprávu o finančním řízení prostředků EU v ČR (pdf). Dočíst se lze například, že přes 8 miliard korun na digitální vzdělávání nepřineslo naplnění žádného z prioritních cílů programu. Peněžní prostředky z fondů EU sice byly vynaloženy formálně v souladu s právními předpisy, avšak s minimálním nebo neprokazatelným dopadem na proklamované cíle ve vzdělávání. Na Metodickém portálu RVP.CZ bylo ke konci

    … více »
    Ladislav Hagara | Komentářů: 13
    dnes 11:33 | Nová verze

    Emulátor terminálu kitty (Wikipedie, GitHub) byl vydán v nové verzi 0.50.

    Ladislav Hagara | Komentářů: 2
    dnes 09:00 | Bezpečnostní upozornění

    Vývojáři C-Kermit oznámili několik dlouhodobě přítomných zranitelností. Patří mezi ně buffer overflow v Telnet/FTP klientovi a command injection v Kermit serveru. Dotčené verze: C-Kermit 11.0.514 a starší. Fix: 11.1.515 [oss-security].

    vencour | Komentářů: 1
    dnes 02:44 | Nová verze

    Byla vydána nová verze 3.2.8 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    včera 16:55 | Nová verze

    Projekt openSUSE dnes, 3. listopadu 2026, oficiálně vydal openSUSE Leap 16.1, novou verzi své stabilní linuxové distribuce. Novinkou je také Immutable Mode, který nahrazuje dosavadní samostatnou distribuci openSUSE Leap Micro. Podrobnosti o novém vydání najdete v oficiálním oznámení nebo v českém překladu oznámení. Instalační obrazy jsou již dostupné na get.opensuse.org. Vydání společně oslavíme v pátek ve virtuálním baru a na … více »

    lkocman | Komentářů: 1
    včera 16:00 | Nová verze

    Bylo oznámeno vydání Fedora Linuxu 45. Ve finální verzi vychází šest oficiálních edic: Fedora Workstation a Fedora KDE Plasma Desktop pro desktopové, Fedora Server pro serverové, Fedora Cloud pro cloudové nasazení, Fedora CoreOS pro ty, kteří preferují neměnné systémy a Fedora IoT pro internet věcí. Vedle nich jsou k dispozici také další atomické desktopy, spiny a laby. Podrobný přehled novinek v samostatných článcích na stránkách

    … více »
    Ladislav Hagara | Komentářů: 1
    včera 15:44 | Zajímavý článek

    Vědci z MIT CSAIL představili koncept 'weight-space programming' a názorně předvedli, že pokročilé jazykové modely SI dokážou přímo číst a upravovat váhy neuronových sítí. Studie ukazuje, že modely nejen dokážou identifikovat účel sítí z pouhého nahlédnutí do jejich číselných vah, ale mohou i cíleně opravovat chyby a nedostatky, například GPT-6 Astra se změnou pouhých 0,016% vah open-weight modelu Qwen3.5-0.8B podařilo odstranit

    … více »
    👻 | Komentářů: 7
    včera 14:00 | Komunita

    Organizátoři komunitního setkání nejen českých a slovenských správců sítí CSNOG 2027, které se uskuteční 20. a 21. ledna na půdě zlínské univerzity Tomáše Bati, oznámili prodloužení termínu pro zasílání abstraktů do programu akce. Zájemci se mohou hlásit prostřednictvím webu setkání do úterý 10. listopadu. Programová komise uvítá příspěvky věnované nejen správě sítí, ale také legislativě a regulaci nebo síťařským aktivitám studentů a pedagogů.

    VSladek | Komentářů: 0
    včera 13:55 | IT novinky

    Bylo spuštěno předobjednávání zařízení Flipper One s Linuxem. Za 20 dolarů si lze koupit kupón a zajistit si tím speciální cenu 379 dolarů po spuštění kampaně na Kickstarteru.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (9%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2975 hlasů
     Komentářů: 34, poslední 26.10. 08:24
    Rozcestník

    Dotaz: multiline grep

    30.4.2008 14:36 Terka | skóre: 13
    multiline grep
    Přečteno: 919×
    Mejme file kde zaznamy zacinaji "2008-" a jsou viceradkove. Chtela bych na nej provest grep tak aby mi zobrazil ne radky, ale zaznamy. Napsala jsem neco v Perlu, ale myslim, ze by to slo lepe. Muzete mi poradit?
    re="4718|4717";
    #main ######################################################
    $/=undef;
    
    
    while ($file=(<>)) # cteni z prikaz radky 
    {
    $a="\n".$file; #kvuli split \n2008
    chop ($a);  #kvuli print "$pole[$i]\n"; - zbavim se posledniho znaku enter
    @pole=split (/\n2008/,$a) ;
    $delka_pole=@pole;
    
    $i=1;
    while ($delka_pole > $i)
    {
        if ($pole[$i]=~/$re/)
        {
        $pridej ="2008" ;
        $pridej =$pridej.$pole[$i]."\n";
        $" = "";             #"########################### ok
        push (@vystup, $pridej);
        }
        $i++ ;
    }
    }
    

    Odpovědi

    30.4.2008 16:00 rastos | skóre: 63 | blog: rastos
    Rozbalit Rozbalit vše Re: multiline grep
    Je počet riadkov v zázname fixný? Ak áno, tak "grep -A".
    30.4.2008 16:37 Terka | skóre: 13
    Rozbalit Rozbalit vše Re: multiline grep
    neni, grep -A -B znam
    30.4.2008 16:41 Jan Šimák | skóre: 37 | Hradec Králové
    Rozbalit Rozbalit vše Re: multiline grep
    Přesně jsem nepochopil tvůj dotaz :-( ale pokud ti jde o počet úspěchů nalezení řetězce, tak by to šlo takto:
    chomp (my @var = STDIN>);
    my $times = grep (/se/m, @var);
    print "$times\n";
    30.4.2008 16:51 Terka | skóre: 13
    Rozbalit Rozbalit vše Re: multiline grep
    jde o grep ne na radky, ale na zaznamy. cili oddelovac neni \n ale ^2008.
    30.4.2008 20:01 ams
    Rozbalit Rozbalit vše Re: multiline grep
    perl -0777 -e 'print map "2008$_", grep /4718|4717/, split/\n2008/, <>' soubor_s_daty.dat
    
    30.4.2008 20:03 ams
    Rozbalit Rozbalit vše Re: multiline grep
    Pisu rychleji nez premyslim :). Toto bude lepsi:
    perl -0777 -e 'print grep /4718|4717/, split/\n(?=2008)/, <>' soubor_s_daty.dat
    
    30.4.2008 20:10 ams
    Rozbalit Rozbalit vše Re: multiline grep
    A jeste poznamka - kdybyste chtela nejakym zpusobem oznacit hranice zaznamu, pak je nejlepsi pouzit $,. Treba dat $,="\n####\n"; pred ten print.
    1.5.2008 11:23 Terka | skóre: 13
    Rozbalit Rozbalit vše Re: multiline grep
    diky za odpoved, mohla bych Vas poprosit jeste o komentar? S Perlem zacinam, tudiz nechapu jak Vas program pracuje. T.
    1.5.2008 11:59 Terka | skóre: 13
    Rozbalit Rozbalit vše Re: multiline grep
    me to za kazdym zaznamem tisklo \n, vam ho to netiskne.
    1.5.2008 12:59 Terka | skóre: 13
    Rozbalit Rozbalit vše Re: multiline grep
    uz mi to tiskne = moje blbost $,
    1.5.2008 13:09 Terka | skóre: 13
    Rozbalit Rozbalit vše Re: multiline grep
    tak to pomalu chapu
    -0777 nacte data jako jeden zaznam
    -e skript je v radce
    (?=2008) si zapamatuje 2008 a do pole to da vcetne toho 2008 (nezahodi tuto cast oddelovace)
    nechapu proc: 
    1. jsou carky mezi prikazy (jde o oddelovac vice prikazu na radce?)
    2. proc je poradi prikazu 1.print 2.split 3.<>
    diky!
    
    1.5.2008 13:17 Terka | skóre: 13
    Rozbalit Rozbalit vše Re: multiline grep
    muzete mi nekdo vysvetlit nasledujici:
    time cat soubor|perl -0777 -e '$,="\n", print grep /40030/, split/\n(?=2008)/, <>'
    real    0m1.137s
    user    0m0.760s
    sys     0m0.510s
    
    time cat soubor|perl -0777 -e 'print grep /40030/, split/(?=\n2008)/, <>' 
    real    0m8.116s
    user    0m7.800s
    sys     0m0.410s
    
    2.5.2008 12:04 ams
    Rozbalit Rozbalit vše Re: multiline grep
    Opravdu zvlastni chovani. Provedla jste mereni casu vicekrat u obou verzi?

    Co se tyce kodu, tak po $,="\n" bych radeji pouzil strednik misto carky i kdyz v tomto pripade je to celkem jedno. Carka obvykle neoddeluje prikazy (na to pouzivate strednik), ale zaznamy v seznamu anebo argumenty prikazu. Tento kod funguje takto:

    1) $,="\n"; Vkladame \n mezi jednotlive polozky v print. Napr., print("a","b","c"); ted vytiskne "a\nb\nc".

    2) Kdyz pridame zavorky, pak prikaz vypada nasledovne:
    print(grep(/40030/, split(/(?=\n2008)/, <>)))
    
    Takze to neni posloupnost prikazu, ale jsou to vlozene prikazy. Operator <> nacte cely soubor (protoze mame $/=undef v dusledku -0777). Provadime split na zaklade regexpu /(?=\n2008)/. Kdybychom pouzili jako oddelovac poli jenom /\n2008/, pak ztratili bychom tuto cast zaznamu (prave proto v mem prvnim reseni je map "2008$_", ktere vraci tuto cast zpatky). Kdyz pouzijeme look-ahead assertion (?=\n2008), pak vlastne provadime split v kazdem bode retezce, za kterym nasleduje \n2008, ale \n2008 neni brano jako soucast oddelovace poli. Vysledek splitu je seznam zaznamu, ktery je predavany jako druhy argument grepu. grep prochazi vsechny zaznamy tohoto seznamu a hleda jenom vyhovujici regexpu /40030/. Funguje nejak takto:
    for $_ (seznam_zaznamu_ktery_vygeneroval_split) {
       if ( $_ =~ /40030/ ) {
           nechame_tento_zaznam_ve_vysledku;
       } else {
           zahodime_tento_zaznam;
       }
    }
    
    Nakonec, print vytiskne vsechny nalezene zaznamy a vlozi mezi ne $, (v nasem pripade prazdny radek).
    2.5.2008 12:11 ams
    Rozbalit Rozbalit vše Re: multiline grep
    Mozna bude jednodussi si to zapsat jako nekolik prikazu:
    $, = "\n";
    $soubor = <>;
    @vsechny_zaznamy = split(/(?=\n2008)/, $soubor);
    @jenom_obsahujici_regexp = grep(/40030/, @vsechny_zaznamy);
    print @jenom_obsahujici_regexp;
    
    2.5.2008 12:26 Terka | skóre: 13
    Rozbalit Rozbalit vše Re: multiline grep
    ad 0) to mereni casu jsem delala nekolikrat.
    ad 1) ted je mi to jasne - vlozene prikazy - proto carka a proto to poradi.
    nakonec jsem tam jeste pridala sort (jako v mem puvodnim skriptu)
    casove je to +- stejne (muj puvodni vs vas)
    
    perl -0777 -e 'print sort grep /neco/, split/^(?=2008)/m, <>'
    velike diky za vysvetleni!
    
    2.5.2008 12:06 ams
    Rozbalit Rozbalit vše Re: multiline grep
    Mimochodem, misto cat soubor | perl -0777 -e '...' je lepsi pouzit perl -0777 -e '...' soubor
    2.5.2008 12:19 Terka | skóre: 13
    Rozbalit Rozbalit vše Re: multiline grep
    jasne. vim ze to je zacatecnicka chyba. delam to casto, lip se mi to cte.
    27.5.2008 07:33 jsk | skóre: 10
    Rozbalit Rozbalit vše Re: multiline grep

    Dobrý den,

    obdobný problém řeším tak, že pomocí tr -d '\r\n' (pro dos) spojím vše do jednoho řádku a následně sed-em rozřežu, na např. pro grep, použitelné řádky, tj. z mého pohledu standardně/typově začínající nebo končící. Pokud mi pošlete vzorek s konkrétním popisem požadavku, mohu se na to zkusit podívat.

    jsk
    27.5.2008 13:52 Yokotashi
    Rozbalit Rozbalit vše Re: multiline grep
    Predpokladam, ze soubor nemuze obsahovat nejaky znak (nebo muze jenom v komentari, kde se da snadno odstranit bez jeho poskozeni). Dejme tomu, ze ten znak je # (lze pouzit jakykoliv).

    cat file|sed 's/^2008/#/'|tr '\n#' '#\n'|grep 'treba konec tretiho#a zacatek ctvrteho radku zaznamu'|tr '\n#' '#\n'| sed 's/#/2008/g'

    Neni to moc hezke, ale funguje to spolehlive.
    27.5.2008 17:57 ams
    Rozbalit Rozbalit vše Re: multiline grep
    Napad je dobry, ale v tomto provedeni nefunguje uplne tak jak je treba. U prvniho nalezeneho zaznamu bude chybet 2008 a naopak za poslednim zaznamem bude 2008 navic. V textovych souborech zpravidla chybi znak s ASCII-kodem 0, proto muzeme pouzit sed 's/^2008/\x002008/' soubor_s_daty.dat | grep -z 'co_hledame' | tr -d '\0', ale i tak je to 4-krat pomalejsi nez reseni v Perlu.
    27.5.2008 18:04 ams
    Rozbalit Rozbalit vše Re: multiline grep
    Zase pisu rychleji nez premyslim :). Takhle to vypada lip (i kdyz funguje naproste stejne):
    sed 's/^2008/\x00&/' soubor_s_daty.dat | grep -z 'co_hledame' | tr -d '\0'

    Založit nové vlákno • Nahoru

    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.