Byla vydána (Mastodon, 𝕏) nová stabilní verze 2.10.38 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.
Google zveřejnil seznam 1220 projektů od 195 organizací (Debian, GNU, openSUSE, Linux Foundation, Haiku, Python, …) přijatých do letošního, již dvacátého, Google Summer of Code.
Na základě DMCA požadavku bylo na konci dubna z GitHubu odstraněno 8535 repozitářů se zdrojovými kódy open source emulátoru přenosné herní konzole Nintendo Switch yuzu.
Webový prohlížeč Dillo (Wikipedie) byl vydán ve verzi 3.1.0. Po devíti letech od vydání předchozí verze 3.0.5. Doména dillo.org již nepatří vývojářům Dilla.
O víkendu probíhá v Bostonu, a také virtuálně, konference LibrePlanet 2024 organizovaná nadací Free Software Foundation (FSF).
Nová vývojová verze Wine 9.8 řeší mimo jiné chybu #3689 při instalaci Microsoft Office 97 nahlášenou v roce 2005.
Coppwr, tj. GUI nástroj pro nízkoúrovňové ovládání PipeWire, byl vydán v nové verzi 1.6.0. Zdrojové kódy jsou k dispozici na GitHubu. Instalovat lze také z Flathubu.
Byla vydána dubnová aktualizace aneb nová verze 1.89 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Vypíchnout lze, že v terminálu lze nově povolit vkládání kopírovaného textu stisknutím středního tlačítka myši. Ve verzi 1.89 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Proton, tj. fork Wine integrovaný v Steam Play a umožňující v Linuxu přímo ze Steamu hrát hry určené pouze pro Windows, byl vydán ve verzi 9.0-1 (𝕏). Přehled novinek se seznamem nově podporovaných her na GitHubu. Aktuální přehled her pro Windows běžících díky Protonu také na Linuxu na stránkách ProtonDB.
Byla vydána verze 1.78.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání na GitHubu. Vyzkoušet Rust lze například na stránce Rust by Example.
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).
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">
sed -e '/<a/ s/.*\(<a [^>]*>\).*/\1/gp' lolvyhledává to jen řádky s "
<a
" a vyjde to prý mnohem rychleji.
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>
sed -e "s/\($1\)/\n\1\n/g" -ne "/$1/p" souborje kratší (a doufám, že funguje, hehe... zrovna to nemůžu ověřit. ale řekl bych, že jo).
sed -e "s/\($1\)/\n\1\n/g" "$2" | grep "$1"
sed 's/<a [^>]*href="\([^"]*\)"[^>]*>/\n\1\n/g' test.txtTo 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.
[mikos@tauri ~]$ awk '{match($0, /<a [^>]*href="([^"]*)"[^>]*>/, arr); print arr[1]}' test.txt bla1a bla2 bla3aJenž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)?
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_souboruAle určitě k zadanému cíli vede cest více.
Tiskni Sdílej: