|
| Er dette muligt med grep? Fra : HH |
Dato : 16-08-05 16:54 |
|
Når jeg søger i min Sendmail maillog fil, så søger jeg typisk på en afsender
eller modtager:
cat maillog | grep modtager@domain.xyz
Er det på en eller anden måde muligt, at opsnappe et par linier før og et
par liner efter hver grep linie og så adskille hver resultat med en streg
eller lignende? Jeg mener, at hvis jeg f.eks. får denne liste frem ved en
almindelig søgning:
cat maillog | grep modtager@domain.xyz
Aug 16 22:02:01 server 56234246 from=modtager@domain.xyz, size=12, nrcpts=1
Aug 16 22:17:21 server 81551A12 from=modtager@domain.xyz, size=10123,
nrcpts=1
Aug 16 23:32:13 server 91AF4152 from=modtager@domain.xyz, size=912, nrcpts=2
... kan man så istedet få sådan en liste her:
cat maillog | grep modtager@domain.xyz | head ? | tail ?
Aug 16 22:02:01 server 56234246 message-id=<blaa6611>
Aug 16 22:02:01 server 56234246 from=modtager@domain.xyz, size=12, nrcpts=1
Aug 16 22:02:01 server 56234246 to=someone@invalid.xyz, relay=nowhere.xyz
------------------------
Aug 16 22:17:20 server 81551A12 message-id=<blaa234234>
Aug 16 22:17:21 server 81551A12 from=modtager@domain.xyz, size=10123,
nrcpts=1
Aug 16 22:17:31 server 56234246 to=mor@jgfjsdfjg.xyz, relay=nowhere2.xyz
------------------------
Aug 16 23:32:13 server 91AF4152 message-id=<eks3sdf78234>
Aug 16 23:32:13 server 91AF4152 from=modtager@domain.xyz, size=912, nrcpts=2
Aug 16 22:02:01 server 56234246 to=someon3@invalid3.xyz, relay=nowhere3.xyz
Dvs. i dette tilfælde 1 linie over og under selve den fundne linie. Er det
muligt?
| |
Kent Friis (16-08-2005)
| Kommentar Fra : Kent Friis |
Dato : 16-08-05 16:56 |
|
Den Tue, 16 Aug 2005 17:53:40 +0200 skrev HH:
> Aug 16 22:17:20 server 81551A12 message-id=<blaa234234>
> Aug 16 22:17:21 server 81551A12 from=modtager@domain.xyz, size=10123,
> nrcpts=1
> Aug 16 22:17:31 server 56234246 to=mor@jgfjsdfjg.xyz, relay=nowhere2.xyz
> ------------------------
> Aug 16 23:32:13 server 91AF4152 message-id=<eks3sdf78234>
> Aug 16 23:32:13 server 91AF4152 from=modtager@domain.xyz, size=912, nrcpts=2
> Aug 16 22:02:01 server 56234246 to=someon3@invalid3.xyz, relay=nowhere3.xyz
>
> Dvs. i dette tilfælde 1 linie over og under selve den fundne linie. Er det
> muligt?
grep -1
$ seq 1 20 | grep -1 5
4
5
6
--
14
15
16
Mvh
Kent
--
Hard work may pay off in the long run, but laziness pays off right now.
| |
Sune Vuorela (16-08-2005)
| Kommentar Fra : Sune Vuorela |
Dato : 16-08-05 16:58 |
|
On 2005-08-16, HH <hh123134@hotmail.com> wrote:
> Er det på en eller anden måde muligt, at opsnappe et par linier før og et
> par liner efter hver grep linie og så adskille hver resultat med en streg
læs om -A og -B i man grep
--
Sune
| |
Adam Sjøgren (16-08-2005)
| Kommentar Fra : Adam Sjøgren |
Dato : 16-08-05 17:03 |
|
On Tue, 16 Aug 2005 17:53:40 +0200, HH wrote:
> Når jeg søger i min Sendmail maillog fil, så søger jeg typisk på en afsender
> eller modtager:
> cat maillog | grep modtager@domain.xyz
Useless use of cat
> Er det på en eller anden måde muligt, at opsnappe et par linier før og et
> par liner efter hver grep linie og så adskille hver resultat med en streg
> eller lignende?
Har du kigget i manualen til grep? Prøv "grep --context=1
modtager@domain.xyz maillog":
$ cat maillog
1
2
modtager@domain.xyz
3
4
5
modtager@domain.xyz
6
7
8
9
modtager@domain.xyz
modtager@domain.xyz
modtager@domain.xyz
10
$ grep --context=1 modtager@domain.xyz maillog
2
modtager@domain.xyz
3
--
5
modtager@domain.xyz
6
--
9
modtager@domain.xyz
modtager@domain.xyz
modtager@domain.xyz
10
$
I det mindste hvis du bruger GNU grep.
Mvh.
--
"Remember, Robert, in life anything can happen." Adam Sjøgren
asjo@koldfront.dk
| |
HH (16-08-2005)
| Kommentar Fra : HH |
Dato : 16-08-05 22:13 |
|
>> Når jeg søger i min Sendmail maillog fil, så søger jeg typisk på en
>> afsender
>> eller modtager:
>> cat maillog | grep modtager@domain.xyz
>
> Useless use of cat
Tjooo... du tænker på, at grep også kan tage en fil? Det er noteret
>> Er det på en eller anden måde muligt, at opsnappe et par linier før og et
>> par liner efter hver grep linie og så adskille hver resultat med en streg
>> eller lignende?
>
> Har du kigget i manualen til grep? Prøv "grep --context=1
> modtager@domain.xyz maillog":
Jeg havde nok ikke studeret man-siden nok. Selv om jeg gerne vil have en
enkel løsning, så havde jeg ikke forestillet mig, at det var SÅ nemt og
derfor var jeg ovre i noget head/tail halløj uden dog at tro, at det kunne
løse problemet 100%. Jeg havde ikke forestillet mig, at grep allerede havde
den løsning indbygget. Men det her er jo som skræddersyet til mit problem,
så mange tak for det!
| |
Mogens Kjaer (17-08-2005)
| Kommentar Fra : Mogens Kjaer |
Dato : 17-08-05 07:42 |
|
HH wrote:
....
> Er det på en eller anden måde muligt, at opsnappe et par linier før og et
> par liner efter hver grep linie og så adskille hver resultat med en streg
> eller lignende?
....
> Aug 16 22:02:01 server 56234246 message-id=<blaa6611>
> Aug 16 22:02:01 server 56234246 from=modtager@domain.xyz, size=12, nrcpts=1
> Aug 16 22:02:01 server 56234246 to=someone@invalid.xyz, relay=nowhere.xyz
Det er faktisk ikke linien før og efter du er interesseret i,
men linierne med samme id, 56234246, i dette tilfælde.
Hvis der kommer flere mails ind på én gang får du fat i forkerte
linier, hvis du bare tager linien før og efter.
Mogens
--
Mogens Kjaer, Carlsberg A/S, Computer Department
Gamle Carlsberg Vej 10, DK-2500 Valby, Denmark
Phone: +45 33 27 53 25, Fax: +45 33 27 47 08
Email: mk@crc.dk Homepage: http://www.crc.dk
| |
HH (17-08-2005)
| Kommentar Fra : HH |
Dato : 17-08-05 21:23 |
|
>> Er det på en eller anden måde muligt, at opsnappe et par linier før og et
>> par liner efter hver grep linie og så adskille hver resultat med en streg
>> eller lignende?
> ...
>> Aug 16 22:02:01 server 56234246 message-id=<blaa6611>
>> Aug 16 22:02:01 server 56234246 from=modtager@domain.xyz, size=12,
>> nrcpts=1
>> Aug 16 22:02:01 server 56234246 to=someone@invalid.xyz, relay=nowhere.xyz
>
> Det er faktisk ikke linien før og efter du er interesseret i,
> men linierne med samme id, 56234246, i dette tilfælde.
> Hvis der kommer flere mails ind på én gang får du fat i forkerte
> linier, hvis du bare tager linien før og efter.
Det er rigtigt, men det er lidt svært (så vidt som jeg kan se det). Hvis
eksemplet er som følger:
Aug 16 22:02:00 server 56234246 message-id=<blaa6611>
Aug 16 22:02:11 server 56234246 from=modtager@domain.xyz, size=12, nrcpts=1
Aug 16 22:02:12 server 67345357 message-id=<jenstest12123>
Aug 16 22:02:12 server 67345357 from=sfdsdf2sdfsdf@domain.xyz, size=23452,
nrcpts=8
Aug 16 22:02:22 server 56234246 to=someone@invalid.xyz, relay=nowhere.xyz
Aug 16 22:02:52 server 67345357 to=test1@sdfsdfid.xyz,
relay=mail.sdfsdfsde.xyz
Man skal jo kende det unikke ID før man kan søge på det og kæde det sammen
og i tilfælde, at jeg søger på f.eks. "someone@invalid.xyz", så står der to
linier længere oppe, som høre med i samme tråd.
Man kunne selvfølgelig lave et script og så sætte en variabel, var=`grep
blaa | awk '{print $5}'` men så skal logfilen læses to gange. Det kunne der
sikkert heller ikke ske det store ved, men er der bedre måder at gøre det
på?
| |
Mogens Kjaer (17-08-2005)
| Kommentar Fra : Mogens Kjaer |
Dato : 17-08-05 22:37 |
|
HH wrote:
...
> Man kunne selvfølgelig lave et script og så sætte en variabel, var=`grep
> blaa | awk '{print $5}'` men så skal logfilen læses to gange. Det kunne der
> sikkert heller ikke ske det store ved, men er der bedre måder at gøre det
> på?
Lidt perl-gymnastik med en hash kan vel klare dette nemt.
Mogens
--
Mogens Kjær, Dataarkæolog
Email: mk@datamuseum.dk
Homepage: http://www.datamuseum.dk
| |
HH (18-08-2005)
| Kommentar Fra : HH |
Dato : 18-08-05 00:00 |
|
>> Det er faktisk ikke linien før og efter du er interesseret i,
>> men linierne med samme id, 56234246, i dette tilfælde.
>> Hvis der kommer flere mails ind på én gang får du fat i forkerte
>> linier, hvis du bare tager linien før og efter.
Dette script ser ud til at fungere fint. Den er hardcoded til at maillog
filen hedder /var/log/maillog.
#!/usr/local/bin/bash
# Debug informations
#set -x
echo "findmail, v1.0, 2005-08-18 @ 00:33"
echo
if [ ! -n "$1" -o "$1" == "--help" ]; then
echo "Usage: `basename $0` email_address"
echo
else
unique="`grep -i $1 /var/log/maillog | awk '{print $6}'`"
echo
"-----------------------------------------------------------------------------------------------------------------"
for email in `echo $unique`
do
output=`grep -w -i "$email" /var/log/maillog`
echo "$output"
echo
"-----------------------------------------------------------------------------------------------------------------"
done
fi
| |
|
|