Portál AbcLinuxu, 12. května 2025 04:42
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
sed
em a grep
em:
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.