[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash & sed & und ich bin zu dappig



Hallo Thomas,

Thomas Halinka <thohal84@yahoo.de> wrote:
>eigentlich hat alles ganz harmlos angefangen und ich wollte hier was
>leidiges mal automatisieren :) 
>
>Jetzt sitz ich schon seit der zehne dran und beiß gleich in meine
>Tastatur.

Besser nicht, sonst kannst Du hier nicht mehr schreiben. ;-)

>Hier erstmal, das was funktioniert
>
> # cat dwtrans.sh
>#!/bin/sh
>
>HOST=`cat /etc/nagios2/conf.d/test.cfg | sed -n '/host_name/p' | cut
>-b 41-99 | tail -1`

Dann kannst Du das allein von sed erledigen lassen kannst, statt
zusätzlich noch cat, cut und tail zu verwenden.

(Ich gehe mal davon aus, dass test.cfg so aufgebaut ist wie die
anderen *.cfg Dateien unter /etc/nagios2/conf.d.)

sed -n '1,/host_name/ s/.*host_name[ ]*\(.*\)/\1/p' test.cfg

>Dann dachte ich, dass ich da einfach n echo reinklemme und mir
>vorherigen da reinschreiben lasse..
>
>cat dwtrans.sh
>#!/bin/sh
>
>HOST=`cat /etc/nagios2/conf.d/test.cfg | sed -n '/host_name/p' | cut
>-b 41-99 | tail -1`
>SRV=` cat /etc/nagios2/conf.d/test.cfg | sed -n
>'/service_description/p' | cut -b 41-99`
>
>for i in $SRV
>    do
>      echo "{{http://domain.de/pnp/index.php?display=image&srv=
>$i&host=testbock&type=traffic&view=2&.png?nocache}}"
>    done
>
>exit 0

An Stelle von "for ... in" würde ich hier "foobar | while read ..."
verwenden, da Du jeweils eine komplette Zeile lesen willst. Für sed
gilt das Gleiche wie zuvor geschrieben.

#!/bin/ksh

# die beiden Variablen nur zur besseren Lesbarkeit
LEAD='{{http://domain.de/pnp/index.php?display=image&srv='
TRAIL='&host=testbock&type=traffic&view=2&.png?nocache}}'

# sed gibt alles nach "service_description" aus, ohne führende
#     Leerzeichen
# while read line liest die Ausgabe von sed zeilenweise in $line ein,
#     so lange wie von der sed Ausgabe eine Zeile gelesen werden kann
sed -n 's/.*service_description[ ]*\(.*\)/\1/p' te.cfg | while read line
do
  echo ${LEAD}${line}${TRAIL}
done

Abhängig davon wie Du das Ergebnis weiter verarbeiten willst müsstest
Du evtl., in der Ausgabe vorhandene Leerzeichen in %20 umwandeln.

Gruß und gutes Neues Jahr
Frank
-- 
"Um sich als Idiot zu qualifizieren, muß man eine Frage stellen, die
trivial in unter einer halben Stunde eigener Recherche zu klären
gewesen wäre." -- Felix von Leitner


Reply to: