Portál AbcLinuxu, 26. října 2025 07:44
grep r\= pozadovany_log | sed -e s/^.*\ r\=//g | awk '{ print $1 }'
Osklive, ale funguje. Zna nekdo lepsi zpusob?
Dik
cat log | sed -n 's|.*r=\([^[:blank:]]*\)[[:blank:]].*|\1|p'Samozrejme experimentalne otestovat a doladit
sedem a grepem:
grep "r=" protokol | sed "s/.*r=\([a-zA-Z0-9.]*\).*/\1/"Najdu tedy řádky obsahující
r= a vyberu jen to, co následuje za tímto řetězcem a skládá se z písmen, číslic a teček, což zachytí jak DNS záznamy, tak IPv4 adresy. Pokud jsou tam i IPv6, je třeba doplit dvojtečku. Příkaz počítá s tím, že na jednom řádku se r= vyskytuje pouze jedenkrát, pokud tomu tak není, vypíše hodnotu u posledního z nich.
A ještě to jde zkrátit
. sed umí i vyhledávat a tisknout jen na požádání:
sed -n "/r=/s/.*r=\([a-zA-Z0-9.]*\).*/\1/p"
Příkaz počítá s tím, že na jednom řádku se r= vyskytuje pouze jedenkrát, pokud tomu tak není, vypíše hodnotu u posledního z nich.
Pokud by to byl problém, tak by tohle mohlo fungovat:
sed 's/r=/\nr=/g' | sed ...
grep r\= neco| sed 's/.*r\=\([^\ ]*\)\ .*/\1/g'
gawk -F 'r=' '/r\=/ { print $2 }' vstup.log | gawk '{ print $1 }'
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.