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 11:00 | Humor

Před týdnem byly zveřejněny informace o bezpečnostní chybě CVE-2018-10933 v knihovně libssh implementující protokol SSH. Autentizaci bylo možné jednoduše obejít odesláním zprávy SSH2_MSG_USERAUTH_SUCCESS. Chyba byla opravena v upstream verzích libssh 0.8.4 a 0.7.6. Chris Lamb, vedoucí projektu Debian, zveřejnil na Twitteru upravený komiks Cyanide & Happiness věnovaný této bezpečnostní chybě.

Ladislav Hagara | Komentářů: 0
dnes 10:22 | Komunita

Mozilla na svém blogu Future Releases oznámila spolupráci se švýcarskou společností Proton Technologies stojící za šifrovanou poštou ProtonMail a virtuální privátní sítí ProtonVPN. Právě službu ProtonVPN v ceně 10 dolarů měsíčně začne Mozilla od zítra postupně nabízet uživatelům Firefoxu v USA. Část peněz bude použita na další rozvoj Firefoxu.

Ladislav Hagara | Komentářů: 0
dnes 00:22 | Nová verze

Byla vydána verze 11.4 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností i s náhledy v příspěvku na blogu.

Ladislav Hagara | Komentářů: 0
dnes 00:11 | Zajímavý článek

Jiří Eischmann se v příspěvku Datovka na Flathubu na svém blogu věnuje aplikaci Datovka, tj. multiplatformní desktopové aplikaci pro přístup k datovým schránkám a k trvalému uchovávání datových zpráv v lokální databázi, ve formátu Flatpak. Instalovat ji lze přímo z Flathubu.

Ladislav Hagara | Komentářů: 0
včera 22:55 | Komunita

Richard Stallman představil první verzi dokumentu s názvem GNU Kind Communication Guidelines s doporučeními pro přispěvatele do projektu GNU. Cílem doporučení je udržovat v komunitě přátelskou atmosféru.

Ladislav Hagara | Komentářů: 4
včera 22:22 | Nová verze

Byl vydán Linux 4.19. Jeho vývoj dokončil a vydání oficiálně oznámil Greg Kroah-Hartman, poněvadž si Linus Torvalds vzal před pěti týdny volno a rozhodl se zapracovat na svém chování. Ke kontroverznímu dokumentu Contributor Covenant Code of Conduct přibyla jeho interpretace Linux Kernel Contributor Covenant Code of Conduct Interpretation. Přehled nových vlastností a vylepšení Linuxu 4.19 na stránce Linux Kernel Newbies a samozřejmě v Jaderných novinách. Kódové jméno Linuxu bylo změněno z Merciless Moray na People's Front.

Ladislav Hagara | Komentářů: 4
včera 02:00 | Pozvánky

Konference OpenAlt 2018 (dříve LinuxAlt a Openmobility) proběhne již o víkendu 3. a 4. listopadu na FIT VUT v Brně. Motto konference je "Otevřeným přístupem k otevřené společnosti". Připraveno je 8 tracků přednášek a workshopů. Pořadatelé připravili výběr toho nejzajímavějšího.

Ladislav Hagara | Komentářů: 0
21.10. 01:00 | IT novinky

Bylo vydáno RFC 8484 řešící posílání DNS dotazů a získávání DNS odpovědí přes protokol HTTPS (DoH, DNS over HTTPS). V aktuálních verzích Firefoxu je DoH ve výchozím nastavení zakázáno. Povolit jej lze v about:config změnou hodnoty network.trr.mode (Trusted Recursive Resolver). V srpnu zveřejnila Mozilla výsledky experimentu s DNS přes HTTPS ve Firefoxu Nightly.

Ladislav Hagara | Komentářů: 49
19.10. 13:00 | Komunita

Při prvním spuštění Ubuntu 18.04 LTS (Bionic Beaver) je spuštěn nástroj Ubuntu Report. Pokud uživatel souhlasí, jsou pomocí tohoto nástroje odeslány do Canonicalu informace o daném počítači (doba instalace, počet procesorů, rozlišení displeje, velikost paměti, časová zóna, ...). V červnu byly zveřejněny první statistiky. Podrobnější statistiky jsou nově k dispozici na samostatné stránce.

Ladislav Hagara | Komentářů: 12
19.10. 01:00 | Pozvánky

O víkendu probíhá v Košicích pravidelné setkání příznivců otevřených technologií OSS Víkend. Na programu je řada zajímavých přednášek a workshopů.

Ladislav Hagara | Komentářů: 0
Přispíváte osobně k vývoji svobodného softwaru?
 (40%)
 (42%)
 (24%)
 (23%)
 (12%)
 (36%)
Celkem 286 hlasů
 Komentářů: 17, poslední včera 22:11
Rozcestník

Dotaz: Náhrada za grep -o v sedu

Mikos avatar 21.4.2006 03:25 Mikos | skóre: 34 | blog: Jaderný blog | Praha
Náhrada za grep -o v sedu
Přečteno: 221×
Oblíbil jsem si parametr grepu -o (only matching). Je to nesmírně užitečná věc a často hodně zjednodušuje práci. Nicméně jsem se dozvěděl, že je to v grepu vcelku novinka (maximálně pár let) a že je obsažena pouze v GNU grepu. Zajímá mě tedy, jak bych jí mohl nahradit sedem (ale nějak skutečně jednoduše, né sed skript na několik řádků ;-)), kdybych se někdy dostal k systému kde grep volbu -o nepodporuje.

Malý příklad, mám soubor test.txt, který obsahuje:
bla <a href="bla">bla</a> bla <a href="bla">bla</a>
<a href="bla">bla</a>
bla <a href="bla">bla</a> bla <a href="bla">bla</a>
Chci vypsat všechny odkazy v něm (tedy adresy, to je jedno). S použitím grep -o je to jednoduché:
[mikos@tauri ~]$ grep -o '<a [^>]*>' test.txt
<a href="bla">
<a href="bla">
<a href="bla">
<a href="bla">
<a href="bla">
Ovšem jak na to se sedem? Zkoušel jsem toto:
[mikos@tauri ~]$ sed -n 's/.*\(<a [^>]*>\).*/\1/gp' test.txt
<a href="bla">
<a href="bla">
<a href="bla">
Jenže jak je vidět, to vypíše pouze jeden výskyt odkazu na řádku, jelikož ona .* sežere ty ostatní výskyty.

Je tu nějaký sed-guru, který by poradil co s tím? ;-) Upozorňuju, že to s těmi odkazy je jen příklad, jde mi prostě o obecnou náhradu za grep -o (fungující naprosto stejně jako grep -o, tedy nestojím o žádné hacky jen pro konkrétní příklad).
CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!

Odpovědi

Mikos avatar 21.4.2006 03:30 Mikos | skóre: 34 | blog: Jaderný blog | Praha
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
Ještě doplnění - také nestojím o žádný ekvivalent v awk nebo dokonce perlu :-) Prostě chci sed, a to pokud možno jednoduše (viděl jsem už řešení, ale byl to ošklivý sed skript na několik řádek, to nechci).

Neexistuje v sedu prostě příkaz jako "vypiš pouze matching regexp"? Print (tedy 'p') vypisuje celý řádek co jsem tak zkoušel :-(
CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
David Watzke avatar 21.4.2006 04:47 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
david@amd64 ~ $ cat lol
bla <a href="bla">bla</a> bla <a href="bla">bla</a>
<a href="bla">bla</a>
bla <a href="bla">bla</a> bla <a href="bla">bla</a>

david@amd64 ~ $ sed -e 's/.*\(<a [^>]*>\).*/\1/gp' lol
<a href="bla">
<a href="bla">
<a href="bla">
<a href="bla">
<a href="bla">
<a href="bla">
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 21.4.2006 04:58 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
A pokud nejsou odkazy na každém řádku, tak použij toto:
sed -e '/<a/ s/.*\(<a [^>]*>\).*/\1/gp' lol
vyhledává to jen řádky s "<a" a vyjde to prý mnohem rychleji.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Mikos avatar 21.4.2006 05:46 Mikos | skóre: 34 | blog: Jaderný blog | Praha
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
Spočítej si kolikrát ti to vyhodí ten výsdledek - ten prostřední řádek to vyhodí 2x. Tzn. tohle není řešení...
CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
David Watzke avatar 21.4.2006 05:50 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
Máš recht... toho jsem si nevšim' :-(
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Mikos avatar 21.4.2006 05:54 Mikos | skóre: 34 | blog: Jaderný blog | Praha
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
No i tak díky, snaha se cení ;-)

Jen doufam že se nějaké skutečné řešení najde (hlavně jednoduché... jak říkam už jsem řešení viděl, ale to byl sed skript na několik řádek a o to fakt nestojim).
CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
Jan Zahornadsky avatar 21.4.2006 09:12 Jan Zahornadsky | skóre: 22 | blog: hans_blog
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
Nene... To ti pouze namečuje poslední výskyt hyperrefu na řádku a ten vypíše dvakrát :-(
Actually, I was half an hour into the pointer scripting documentation when she got dressed and left.
Jan Zahornadsky avatar 21.4.2006 08:43 Jan Zahornadsky | skóre: 22 | blog: hans_blog
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
Napadlo mě následující řešení: nejdříve si rozsekáme soubor tak, že na jednom řádku bude maximálně jeden hyperref. To zařídíme například tak, že před každý znak "<" a za každý znak ">" vložíme newline. A na to už jde aplikovat docela jednoduchý regexp. Takže konkrétně tvůj případ:
john@turion ~ $ cat test
<a href="1"> xxx <a href="2">
dsjhfsk <a href="3">\bla
mame tu link <a href="4"> a tady taky <a href="5">
john@turion ~ $ cat test | sed 's/>/>\n</g; s/</\n</g' | sed -n '/^<a href=".*">/p'
<a href="1">
<a href="2">
<a href="3">
<a href="4">
<a href="5">
A nebo abys netvrdil, že je to jednorázový konkrétní hack, tak lze si zařídit jednoduchoučký skriptík grep-o:
#! /bin/sh
sed "s/\($1\)/\n\1\n/g" $2 | sed -n "/$1/p"
a teď:
john@turion ~ $ ./grep-o '<a [^>]*>' test
<a href="1">
<a href="2">
<a href="3">
<a href="4">
<a href="5">
john@turion ~ $ echo "<a hhhh> <b jjjj> <a xxx>" | ./grep-o '<a [^>]*>' -
<a hhhh>
<a xxx>
Actually, I was half an hour into the pointer scripting documentation when she got dressed and left.
21.4.2006 09:19 David Watzke
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
sed -e "s/\($1\)/\n\1\n/g" -ne "/$1/p" soubor
je kratší (a doufám, že funguje, hehe... zrovna to nemůžu ověřit. ale řekl bych, že jo).
Jan Zahornadsky avatar 21.4.2006 09:48 Jan Zahornadsky | skóre: 22 | blog: hans_blog
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
No, tohle natáhne řádek do bufferu (například "Ahoj, <a href="test">, jak se vede?" )rozseká řádek tak, že před a za regexp vloží newliny (v bufferu je teď "Ahoj, \n<a href="test">\n, jak se vede?") a na tento buffer aplikuje druhý regexp a tentokrát se ten regexp porovnává v podstatě se třema řádky najednou. Takže se to mine účinkem :-(

Ale jo, určitě to moje jde napsat i nějak jinak, jen tak mě napadá
sed -e "s/\($1\)/\n\1\n/g" "$2" | grep "$1"
Actually, I was half an hour into the pointer scripting documentation when she got dressed and left.
Mikos avatar 21.4.2006 15:21 Mikos | skóre: 34 | blog: Jaderný blog | Praha
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
Díky, tohle funguje :-) Ale pořád to není řešení problému, rpotože to funguje jen a pouze pokud vím, co najdu. Tedy abych to upřesnil - mohl bych např. chtít hledat ne celý odkaz, ale jen to co je v href="". Tedy něco takového:
sed 's/<a [^>]*href="\([^"]*\)"[^>]*>/\n\1\n/g' test.txt
To sice krásně funguje, ale pak už nedokážu sestavit ten druhý sed (či grep), protože prostě nemůžu vědět co v tom href="" bude uloženo. Tedy i když právě si uvědomuju, že tohle bych asi neudělal ani s grep - o :-)

Každopádně je nějaké řešení i pro tento případ? Ono by to tedy samozřejmě šlo udělat více sedy v koloně, ale neexistuje i nějaké hezší/čistší/jednodušší řešení? Prostě něco jako příkaz print v sedu, ale aby vypsal vždy pouze třeba \1 a ne celý řádek.
CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
Mikos avatar 21.4.2006 16:54 Mikos | skóre: 34 | blog: Jaderný blog | Praha
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
Hmm, já už snad v tomhle na sed rezignuju. Pokud tedy někoho nenapadá ak to elegantně a jednoduše udělat v sedu, napadá aspoň někoho jak to udělat v awk?

Zkoušel jsem toto:
[mikos@tauri ~]$ awk '{match($0, /<a [^>]*href="([^"]*)"[^>]*>/, arr); print arr[1]}' test.txt
bla1a
bla2
bla3a
Jenže jak je vidět, příkaz "match" bere vždy jen první výskyt daného regexpu (tedy jako sed 's/pattern//', prostě bez onoho obligátního 'g'). Navíc co jsem tak koukal, je onen třetí argument u příkazu match také jen GNU rozšířením (tedy pouze v gawku).

To to opravdu není v sedu ani v awku nějak elegantně a jednoduše řešitelné? To bych opravdu na takovou blbost musel používat python (nebo nedejbože perl, fuj :-P)?
CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
21.4.2006 17:25 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: Náhrada za grep -o v sedu
Pravděpodobně náhrada za grep -o bude vycházet trošku složitěji, proto asi grep tuto volbu má. Tak už to většinou bývá, že náhrada za něco bývá komplikovanější.

Nejjednodužší, nejpřehlednější a funkční řešení zadaného úkolu grep -o mi připadá (viz. výše) udělat si jednořádkový miniskriptík s obsahem :
sed -e "s/\($1\)/\n\1\n/g" "$2" | grep "$1"
a pak ten miniskriptík volat s parametry :
# miniskriptik hledany_retezec v_souboru
Ale určitě k zadanému cíli vede cest více.

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.