Portál AbcLinuxu, 30. dubna 2025 10:09
Linux je můj koníček. Linux je velká část mého volného času. Linux je i velká část příjmů mého studentského života. Umožnil mi lehčí nadstandard po finanční stránce. Za to vděčím nejen kamarádovi, který mi linux kdysi ukázal, ale hlavně své motivaci se neustále něco učit. Přesto existují oblasti, ve kterých se téměř vůbec neorientuju. Aktuálně jsou to programy sed & awk a regulární výrazy.
Z výstupu MRTG jsem chtěl vyparsovat časové údaje mezi tagy strong na řádce
Poslední aktualizace statistiky: _ <strong>Neděle 19. Únor 2006 , 18:51 hod </strong>, abych to mohl dále zpracovávat pomocí PHP. Narazil jsem na spoustu problémů. Buď jsem se nezbavil tagů strong, nebo jsem se zbavil všeho nebo všelijaké paskvily. Trápil jsem se s takovou hloupostí několik hodin. Ale určitě to nebylo zbytečné. Pochopil jsem, jak funguje awk.
Jak to dopadlo? Dávám to sem, třeba se to někomu bude hodit.
Soubor aktualizace.awk:
{ sStart = index($0, "<strong>") + 8; sEnd = index($0, "</strong>"); sLength = sEnd - sStart + 8; print(substr($0, sStart, sLength)); }
Soubor aktualizace.php:
<?php echo "Poslední aktualizace statistiky: <b>", _ `cat mrtg.html | grep aktualizace | awk -f aktualizace.awk`, _ "</b>"; php?>
Příští zastávka: sed
Tiskni
Sdílej:
cat mrtg.html | grep aktualizace | awk -f aktualizace.awklepší je
grep aktualizace mrtg.html | awk -f aktualizace.awk
zgrep
, nebo bzgrep
. To se netýká awk
, nebo sed
u. Je pravda, že psát wrapper na každou z textutils by bylo docela drsné cat
?
cat
nic nemám Myslim ze trochu jednodussi, citelnejsi a funkcnejsi zapis toho sed
u by byl
sed -e 's%^.*<strong>\(.*\)</strong>.*$%\1%'
Ubylo tak zbytecneho escapovani. Je to i funkcnejsi, protoze vase ukazka pouze defakto "umaze" tagy <strong> a jeho zaviraci obdobu.
sed -n '{/<STRONG>.*<\/STRONG>/s/^.*<STRONG>\(.*\)<\/STRONG>.*$/\1/};T;p' mrtg.html
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.