sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #70021
Re: Et simplere og evt. mere effektivt script
Tirsdag 13 januar 2004 01:39 kvad Soren Munk:
> Hej folkens
> Sidder med et gammelt script som gør et udemærket job med at
> filtrere nogle ting ud af iptables-logfil
>
> grep "firewall " /var/log/firewall/iptables | sed 's/ MAC=[^ ]*//'
> | sed 's/ TOS=[^ ]*//' | sed 's/ PREC=[^ ]*//' | sed 's/ ID=[^
> ]*//' | sed 's/ TTL=[^ ]*//' | sed 's/ WINDOW=[^ ]*//' | sed 's/
> RES=[^ ]*//' | sed 's/ URGP=[^ ]*//' | sed 's/ munk kernel[^ ]*//'
> | sed 's/ firewall[^ ]*//'> /var/log/firewall/iptables-mod
>
> Kan det gøres nemmere ? Selvfølgelig kan det det, men hvordan ?
> Kan man evt. slå alle sed kaldene sammen til et?
God dag Søren,
uden at have testet det vil jeg tro at noget lignende følgende kan
gøre det:
sed '/firewall /!d;s/ \(MAC=\|TOS=\|PREC=\|ID=\|TTL=\|WINDOW=\|RES=\|
URGP=\|munk kernel\|firewall\)[^ ]*//' /var/log/firewall/iptables > /
var/log/firewall/iptables-mod
Som du kan se behøver du ikke grep.
Ovenstående gennemløber /var/log/firewall/iptables linje for linje.
Hvis linjen indeholder strengen "firewall " bliver den _ikke_ (!)
slettet (d). Helt ligesom dit originale eksempel hvor du med grep kun
udtrækker linjer der indeholder strengen.
Semikolonet angiver en ny sed-kommando at udføre på linjen.
Derefter bruges seds ELLER-operator - \| - til at liste alle de ord
der alternativt kan indgå i det mønster du ønsker at erstatte.
Samlingen af alternative ord er samlet inden for et par paranteser -
\( og \) - for at skelne dem fra ikke-alternative mønstre som de skal
optræde sammen med - her " " foran alternativerne og "[^ ]*" efter
alternativerne.
Hvis du vil bibeholde alle linjer, og blot ændre i de som indeholder
strengen "firewall " kan du pakke det en smule mere sammen således:
sed '/firewall /s/ \(MAC=\|TOS=\|PREC=\|ID=\|TTL=\|WINDOW=\|RES=\|
URGP=\|munk kernel\|firewall\)[^ ]*//' /var/log/firewall/iptables > /
var/log/firewall/iptables-mod
Her er blot fjernet "!d;" så alle linjer der indeholder strengen
"firewall " behandles og alle der ikke indeholder strengen lades
ubehandlede men iøvrigt ryger med i udfilen.
Hilsen Johnny :o)
Follow ups
References