/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
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



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste