Archiv verlassen und diese Seite im Standarddesign anzeigen : grep und awk
Hallo,
die beiden Befehle gehören wohl zu den Klassikern der *nix-Tools. Und man kann schöne Pipes damit bauen:
ifconfig eth0 | grep "inet addr:" | awk '{ print $2 }' | awk -F ':' '{ print $2 }'
Dieses Beispiel holt aus der 'ifconfig'-Ausgabe die IP-Adresse und gibt sie aus.
Weitere Beispiele erwünscht, vielleicht mal was mit sed?
Spass damit,
emwe
Ja klar, hier bitte:
Zum Beispiel aus dem Startscript von meinem Diskless Cluster:
IP=`/sbin/ifconfig eth0 | awk '/inet/ { print $2 } ' | sed -e s/addr://`
if [ "$IP" != "" ]; then
echo "Starting services for diskless workstation:"
# get hostname
HOSTNAME=`/usr/bin/nslookup $IP | awk '/Name/ { print $2 } ' `
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
# get host-number
declare -i HOST_NUM=`echo $IP | sed -e s/[0-9]*.[0-9]*.[0-9]*.//`-10
HOSTNAME="Ace$HOST_NUM.Bachmaier"
fi
Auf meiner Redhat 7.2 sieht das ganze folgendermaßen aus:
/sbin/ifconfig ppp0 | grep "inet Adr" | awk '{ print $2 }' | awk -F ':' '{ print $2 }'
und hier ein kleines Skript zum auslesen der online Zeit für Leute mir dsl ohne flat
#!/bin/bash
date | cut -c 5-7 |
read month &&
cat /var/log/messages |
grep "$month" |
grep "Connect time"
Grüße fs111
hai zusammen.
bitte versteht meine folgenden worte als kleinen
tip am rande und nicht als kritik.
> ifconfig eth0 | grep "inet addr:" | awk '{ print $2 }' | awk -F ':' '{ print $2 }'
nun es brennt mir halt doch immer wieder in den
augen, wenn ich diese oder ähnliche "grep"/"awk"-verschachtelungen sehe.
in diesem fall ist z.b. der grep überflüssig. denn
awk '/inet addr:/ { print $2 }'
erledigt den gleichen job mit nur einem
kommando und lässt so ein mächites tools wie
"awk" nicht nur auf die kleinsten aller spatzen
schiessen *g*
wenn schon viel verschachteln, dann ist "cut" sicher
die schnellere wahl, gerade wenn die eingabe sehr
gross wäre.
natürlich ist unter gewissen umständen auch aus
geschwindigkeitsgründen der "grep" einem "awk"
vorzuziehen. bei diesen fällen bin ich aber meistens
direkt beim "C"-prommieren gelandet.
es gibt natürlich noch einige möglichkeiten den
2. awk einzusparen, aber ich denke ich hab
jetzt doch schon genug klug*******erei
abgesondert ;)
viele gruesse
lankin
dein stück script ist leider nicht viel besser :
atmk:/etc/bind# ifconfig | awk '/inet addr: / { print $2 }'
addr:193.201.54.108
addr:193.201.54.188
addr:193.201.54.189
addr:193.201.54.190
es sollte so ausschauen (mit sed):
atmk:/etc/bind# ifconfig | awk '/inet addr:/ { print $2 }' |sed 's/.*://';
193.201.54.108
193.201.54.188
193.201.54.189
193.201.54.190
127.0.0.1
aber viele Wege führen nach Rom.
Ein paar andere Bsp. aus meinem alltäglichen gebrauch:
Netstat übersicht tabellarisch
netstat -aep --numeric-hosts --numeric-ports | egrep '(ESTABLISHED|LISTEN)' | sed 's/:\([0-9\*]*\) / \1 /g;s/\// /g' | awk '{print $8 " ip: " $4 "\tto_ip: " $6 "\tport: " $5 "\tuser: " $9 "\tname: " $12 "\tpid: " $11}'
hier ein Beispiel fuer eine Verhaspelung *g*
Eigentlich sollte hier ein sed Befehl stehen der in einem Abwasch alle Devices
nach IP Adressen scannt. Ist zwar gegen die Unix Philosophie . (von wegen Pipes usw.)
grrr, ausserdem wollte ich keine Statischen Elemente mehr drin haben:
ifconfig | sed -e '1,$s/inet addr://' -e 's/[0-9]\{0,3\}\.[0-9]\{0,3\}\.[0-9]\{0,3\}\.[0-9]\{0,3\} ://' -e 's/[\t ]//g' -e 's/[a-z,A-Z]//g' -e 's/1^[^:0*]//g' -e 's/[:]//g' -e 's/255*//g' -e 's/(*)*//g' -e 's/^0*.0//g'
todo: vereinfachen mit oderverknüpfungen
genau 4 aber nicht mehr zahlen
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.