Portál AbcLinuxu, 12. května 2025 05:27

Dotaz: Regularni vzraz

25.3.2010 23:05 Rogue | skóre: 4
Regularni vzraz
Přečteno: 305×
Odpovědět | Admin
Ahoj rozumi tady někdo hodně dobře regularnim výrazům, potřeboval bych poradit. Problém se týká, toho že když si přesměruju výstup do souboru tak můj výraz nefunguje. Když do souboru nepřesměruji výraz funguje naprosto bez problému.

Řešení dotazu:


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

Odpovědi

25.3.2010 23:17 12345 | skóre: 41 | blog:
Rozbalit Rozbalit vše Re: Regularni vzraz
Odpovědět | | Sbalit | Link | Blokovat | Admin

Dobrá rada: jestli chceš pomoct, musíš:

  1. ukázat kód
  2. popsat "funguje" (očekávané chování)
  3. popsat "nefunguje" (skutečné chování)

Tvůj popis problému je naprosto nicneříkající. Věšteckou kouli máme všichni v opravě.

25.3.2010 23:46 Rogue | skóre: 4
Rozbalit Rozbalit vše Re: Regularni vzraz
OK, mohl bych ti to poslat prosím na mail bojim se o to aby mi to někdo neokopíroval.
26.3.2010 00:06 12345 | skóre: 41 | blog:
Rozbalit Rozbalit vše Re: Regularni vzraz
Pardon, ale tohle ne. Poradna je veřejně přístupná, aby se z dotazů a odpovědí mohl kdokoliv poučit a aby se na řešení problému mohlo podílet více lidí. Soukromé poradenství je něco jiného.

Mail jsem dostal a můžu říct, že nejde o žádné supertajemství, o které by ses měl bát. Pár obyčejných regexpů, na kterých nikdo nezbohatne. Vlož to sem a určitě se najde několik lidí, kteří ti to jednak pomůžou opravit, jednak zoptimalizovat (ten awk | sed | sed | grep | awk | sed určitě půjde sloučit do jednoho awk).
26.3.2010 12:37 Rogue | skóre: 4
Rozbalit Rozbalit vše Re: Regularni vzraz

Dobrá tedy pomohl by mi to někdo zoptimalizovat prosím, a vyřešit tu chybu proč mi to nefilturuje výstup z toho souboru.

strace -f 2>&1 ./pokus.sh > /dev/null |

awk '/<unfinished ...>$/ {pole[$1$2]=$0; next}/<... .* resumed>/ {if($1$2 in pole) print pole[$1$2] $0; delete pole[$1$2]; next}{ print $0 }' |

sed 's/^\(.*\) <unfinished .* resumed> \(.*\)/\1\2/' |

sed 's/^[pid [0-9]*] \(.*\)/\1/' |

grep '^execve(' |

awk '{ if($4 >= 0 ) print $1}' |

sed 's/^.*"\([^"]*\)".*/\1/' |  sort |  uniq

Tento kod normalně filtruje, problém je však v tom když to strace přesměruji do souboru:

strace -f -o soubor 2>&1 ./pokus.sh > /dev/null

a chci vyfiltrovat soubor tak nastane problém. Několikrát jsem upravoval sed i awk, ale pořád se mi to nedaří. Díky za odpovědi

26.3.2010 12:53 l4m4
Rozbalit Rozbalit vše Re: Regularni vzraz
Vlož to prosím do <pre>, ať to jde číst...
26.3.2010 12:57 Rogue | skóre: 4
Rozbalit Rozbalit vše Re: Regularni vzraz
strace -f 2>&1 ./pokus.sh > /dev/null | 
awk '/<unfinished ...>$/ {pole[$1$2]=$0; next}/<... .* resumed>/ {if($1$2 in pole) print pole[$1$2] $0; delete pole[$1$2]; next}{ print $0 }' |
sed 's/^\(.*\) <unfinished .* resumed> \(.*\)/\1\2/' |     
sed 's/^[pid [0-9]*] \(.*\)/\1/' |
grep '^execve(' |awk '{ if($4 >= 0 ) print $1}' | sed 's/^.*"\([^"]*\)".*/\1/' | sort | uni
26.3.2010 13:00 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Regularni vzraz
Jakým způsobem filtrujete ten soubor? Co přesně znamená "nastane problém"?
26.3.2010 13:09 Rogue | skóre: 4
Rozbalit Rozbalit vše Re: Regularni vzraz
Přes strace si udělám výpis do souboru. Ale tam mám problém s tím regulárním výrazem přitom výstupy jsou totožné. (U souboru se musí udělat malá úprava s pid, ale jinak je to totožné) No a ten výraz mi to nechce filtrovat z toho souboru právě, respektive filtruje, ale špatně.
26.3.2010 13:19 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Regularni vzraz
Ach jo. To je jak do dubu... Stejný filtr vám ze stejného vstupu poskytne stejný výstup. Takže chcete-li poradit, konečně odpovězte na otázku, co přesně jste dělal. Bez toho se z místa nepohneme.
26.3.2010 13:33 Rogue | skóre: 4
Rozbalit Rozbalit vše Re: Regularni vzraz
Nejprve jsem si filtroval data přímo ze strace pak jsem si přesměroval výstup ze strace do souboru. Potřebuji nyní filtrovat ten soubor a dostat stejná data jako kdybych filtroval přímo strace. Omlouvám se za špatné vysvětlení a díky za pomoc.
26.3.2010 13:55 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: Regularni vzraz
No problem je, ze format vystupu z strace na stderr a pomoci prepinace -o je jiny (docela pekna feature pro zmateni).

Pomoci presmerovani napr:

execve("./xxx", ["./xxx"], [/* 55 vars */]) = 0
...
[pid 29787] execve("/bin/ls", ["ls"], [/* 54 vars */] <unfinished ...>

Pomoci paremetru -o:
29725 execve("./xxx", ["./xxx"], [/* 55 vars */]) = 0
...
29726 execve("/bin/ls", ["ls"], [/* 54 vars */]) = 0

Nejjistejsi cesta je prevest ten soubor na puvodni format, coz by se dalo udelat napriklad pridanim na zacatek tohohle vyrazu:
sed 's/\([0-9]\+\) /[pid \1] /'
Lepsi cesta je to nejak zoptimalizovat, ale to je na delsi dobu premysleni co tim autor myslel :-)
26.3.2010 14:40 Rogue | skóre: 4
Rozbalit Rozbalit vše Re: Regularni vzraz
No ten sed mne napadl také, ale stejně to nefunguje i sním pořád nedostanu ten očekávaný výstup. :-(
Řešení 1× (12345)
26.3.2010 14:44 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Regularni vzraz
Nebylo by jednodušší místo -o použít klasické přesměrování shellem? Pak by ten formát měl být stejný.
26.3.2010 14:50 Rogue | skóre: 4
Rozbalit Rozbalit vše Re: Regularni vzraz
Ano měl jste naprostou pravdu problém vyřešen, tohle by mne ani ve snu nenapadlo :-D Nechápu jen jedno proč je ten strace takhle udělaný. Když ho požádám parametrem -o proč mi nedá totožný výstup. Moc Vám děkuji už jsem přestával doufat že to takto půjde.
26.3.2010 14:59 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Regularni vzraz
Abych pravdu řekl, nikdy jsem si nevšiml, že jsou ty formáty různé, a nepřipadá mi to jako moc dobrý nápad. Ale ono se obecně na stálost výstupního formátu moc spoléhat nedá (pokud ten formát není výslovně specifikovaný v dokumentaci).
26.3.2010 15:11 Rogue | skóre: 4
Rozbalit Rozbalit vše Re: Regularni vzraz
Ještě jsem se chtěl zeptat jestli vás nenapadá náhodou nějáká úprava v mám výrazu mám na mysli jeho optimalizaci. Mě příjde tak trochu "prasácý".

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.