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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 3
včera 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 22
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 8
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 2
2.12. 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
2.12. 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 0
2.12. 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
1.12. 21:00 | Nová verze

Byla vydána beta verze Linux Mintu 18.1 s kódovým jménem Serena. Na blogu Linux Mintu jsou hned dvě oznámení. První o vydání Linux Mintu s prostředím MATE a druhé o vydání Linux Mintu s prostředím Cinnamon. Stejným způsobem jsou rozděleny také poznámky k vydání (MATE, Cinnamon) a přehled novinek s náhledy (MATE, Cinnamon). Linux Mint 18.1 bude podporován až do roku 2021.

Ladislav Hagara | Komentářů: 0
1.12. 16:42 | Nová verze

Byl vydán Devuan Jessie 1.0 Beta 2. Jedná se o druhou beta verzi forku Debianu bez systemd představeného v listopadu 2014 (zprávička). První beta verze byla vydána v dubnu letošního roku (zprávička). Jedna z posledních přednášek věnovaných Devuanu proběhla v listopadu na konferenci FSCONS 2016 (YouTube, pdf).

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 768 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: multiline grep

30.4.2008 14:36 Terka | skóre: 13
multiline grep
Přečteno: 617×
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: 60 | 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: 7
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á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.