Portál AbcLinuxu, 20. prosince 2025 13:37
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
Viz Kde se vzalo 'cat soubor | příkaz'?.
zgrep, nebo bzgrep. To se netýká awk, nebo sedu. 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 sedu 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-freedeb http://ftp.cz.debian.org/debian jessie main contrib non-freeISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.