Sonie
Anmeldungsdatum: 1. Mai 2012
Beiträge: 135
Wohnort: Höchst im Odenwald
|
ich suche ein script, welches mit die IP´s eines Host aus einer Datei ausliest, dabei aber bestimmte Bereiche filtert. im augenblick sieht das so aus: # system_ip=$(grep $HOSTNAME /etc/hosts|tr '\t' ' '|cut -d' ' -f1)
127.0.0.2
172.27.0.199 die 127.x.x.x soll aber nicht übergeben werden....
|
radoe2
Anmeldungsdatum: 30. November 2006
Beiträge: 243
|
Sonie schrieb: ich suche ein script, welches mit die IP´s eines Host aus einer Datei ausliest, dabei aber bestimmte Bereiche filtert. im augenblick sieht das so aus: # system_ip=$(grep $HOSTNAME /etc/hosts|tr '\t' ' '|cut -d' ' -f1| grep -v '^127')
127.0.0.2
172.27.0.199 die 127.x.x.x soll aber nicht übergeben werden....
Am Ende einfach ausfiltern, siehe markierte Ergänzung.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Nutze die entsprechenden Shell-Tools:
$ ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 64:51:06:30:9c:be brd ff:ff:ff:ff:ff:ff
inet 192.168.0.97/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::6651:6ff:fe30:9cbe/64 scope link
valid_lft forever preferred_lft forever
3: vboxnet0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
Das kannst du auch auf das Device und nach IPs greppen:
$ ip address show dev eth0 | grep inet | awk '{ print $2 }'
192.168.0.97/24
fe80::6651:6ff:fe30:9cbe/64
Die Hosts-Datei hat nichts mit den auf dem System konfigurierten IPs zu tun.
|
Sonie
(Themenstarter)
Anmeldungsdatum: 1. Mai 2012
Beiträge: 135
Wohnort: Höchst im Odenwald
|
misterunknown schrieb: Nutze die entsprechenden Shell-Tools:
Die Hosts-Datei hat nichts mit den auf dem System konfigurierten IPs zu tun.
die ip sind doch gar nicht auf dem entsprechenden interface gebunden. die stehen natürlich in der hosts drinnen. ich hab als Parameter nur den $Hostname
|
Sonie
(Themenstarter)
Anmeldungsdatum: 1. Mai 2012
Beiträge: 135
Wohnort: Höchst im Odenwald
|
radoe2 schrieb: # system_ip=$(grep $HOSTNAME /etc/hosts|tr '\t' ' '|cut -d' ' -f1| grep -v '^127')
Am Ende einfach ausfiltern, siehe markierte Ergänzung.
danke ! Past perfekt!
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Sonie schrieb: die ip sind doch gar nicht auf dem entsprechenden interface gebunden. die stehen natürlich in der hosts drinnen. ich hab als Parameter nur den $Hostname
Ok, das hatte ich falsch verstanden. Ich dachte die gebundenen IPs wären gemeint.
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14347
|
Sonie schrieb: ... Past perfekt!
BTW: Ist die Ausgabe von:
hostname -i
oder von:
hostname -I
, dann nicht auch die gesuchte IP-Adresse?
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
lubux schrieb: hostname -I
Hallo! Ja, vom aktuellen Rechner. In der hosts können aber diverse Rechner hinterlegt sein. Beispiel: 192.168.1.40 desktop
192.168.1.49 netbook
192.168.1.33 schleppi
192.168.1.46 ubutouch
grep desktop /etc/hosts | awk '{ print $1 }'
#ergibt
192.168.1.40
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14347
|
ChickenLipsRfun2eat schrieb: lubux schrieb: hostname -I
Hallo! Ja, vom aktuellen Rechner. In der hosts können aber diverse Rechner hinterlegt sein.
Ja, das ist richtig, aber im 1. Beitrag wird ja nach dem Inhalt der $HOSTNAME-Variable u. a. auch gefiltert:
system_ip=$(grep $HOSTNAME /etc/hosts|tr '\t' ' '|cut -d' ' -f1)
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Stimmt. Ich hatte nur im Kopf "Variable". Aber ist ja ne Systemvariable. Dann wäre deine Lösung auf jeden Fall die bequemste ☺
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Sonie schrieb: radoe2 schrieb: # system_ip=$(grep $HOSTNAME /etc/hosts|tr '\t' ' '|cut -d' ' -f1| grep -v '^127')
Am Ende einfach ausfiltern, siehe markierte Ergänzung.
danke ! Past perfekt!
Rein handwerklich sieht das etwas ungeschlacht aus. Mein Vorschlag, der im Prinzip das selbe macht: | system_ip=$(sed -n "/^127/d; s/\t$HOSTNAME$//p" /etc/hosts )
|
(diese Version kann sogar die Hosts "Linux" und "Linux-2" (also Teilstrings) sauber auseinander halten !) LG, track
|
Sonie
(Themenstarter)
Anmeldungsdatum: 1. Mai 2012
Beiträge: 135
Wohnort: Höchst im Odenwald
|
Rein handwerklich sieht das etwas ungeschlacht aus. Mein Vorschlag, der im Prinzip das selbe macht: | system_ip=$(sed -n "/^127/d; s/\t$HOSTNAME$//p" /etc/hosts )
|
(diese Version kann sogar die Hosts "Linux" und "Linux-2" (also Teilstrings) sauber auseinander halten !)
gibt bei mir kein Ergebnis... ☹ Bearbeitet von rklm: Überzählige schließende }}} entfernt
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Sonie schrieb: ... gibt bei mir kein Ergebnis... ☹
Bei mir auch nicht. Aber das hat bei mir den Grund, dass ich dort nur einen Host habe, und der hat 127.0.1.1 Guck doch mal einfach, was er auswirft, wenn Du den 127-er Filter weglässt: | sed -n " s/\t$HOSTNAME$//p" /etc/hosts
|
Du musst natürlich so einen Filter immer scheibchenweise aufbauen und jeweils gucken was da raus kommt. Anders habe ich es ja auch nicht gemacht. LG, track
|
Sonie
(Themenstarter)
Anmeldungsdatum: 1. Mai 2012
Beiträge: 135
Wohnort: Höchst im Odenwald
|
Guck doch mal einfach, was er auswirft, wenn Du den 127-er Filter weglässt: | sed -n " s/\t$HOSTNAME$//p" /etc/hosts
|
Du musst natürlich so einen Filter immer scheibchenweise aufbauen und jeweils gucken was da raus kommt. Anders habe ich es ja auch nicht gemacht.
habe ich leider nicht erwähnt, natürlich habe ich die SED-Zeile durchprobiert - der 127^filter funktioniert, diese Zeile hier bringt kein Ergebnis. ich vermute mal, es liegt am quoten - $hostname ist ja eine bashvariable...
search='/^127/d;/'$HOSTNAME'/p'
target_ip=$(sed -n $search /etc/hosts| awk '{ print $1 }')
echo $target_ip thanks for support.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Du veranstaltest auf der einen Seite eine etwas sinnlose 'Quoting'- Orgie, die nichts bringt (weil in dem '/^127/d;/' und dem '/p' wirklich nichts giftiges drin ist), aber auf der anderen Seite lässt Du die Verankerung ans Zeilenende weg, so dass er auch auf längere Strings matcht, die den Ausdruck enthalten. Edit: ich korrigiere mich: das ";" muss man sehr wohl quoten oder escapen, damit die Shell es nicht interpretiert. Verstehst Du, was ich meine ? Du solltest diese 2 Punkte nachbessern: search='/^127/d;'/$HOSTNAME$/p
target_ip=$(sed -n $search /etc/hosts | awk '{ print $1 }')
echo $target_ip Aber im Grunde ist das awk gar nicht nötig, das kann sed auch alleine: siehe hier oben. LG, track
|