Wie man die Ausgabe von grep zum Ping benutzt


0

Ich versuche verzweifelt, die Ausgabe von grep für ein Skript zu verwenden:

ping dc"$(grep -o .""\[12].domain.local"" /etc/squid3/squid.conf)"

ping "$(grep -o ""dc0\[12].domain.local"" /etc/squid3/squid.conf)"

Beide kehren zurück:

ping: unknown host dc02.domain.local

Wenn ich eingebe ping dc02.domain.local, funktioniert es! Ich kann nicht sehen, was ich falsch mache?

Relevante Zeile von /etc/squid3/squid.conf ist:

external_acl_type memberof %LOGIN /usr/lib/squid3/squid_ldap_group -R -K -b "dc=domain,dc=local" -D username@domain.local -W /aaa/bbb/ccc.txt -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%g,ou=aaa,ou=bbb,ou=ccc,ou=ddd,ou=eee,dc=domain,dc=local))" -h dc02.domain.local

Hallo, danke für deine Antwort, aber die vorgeschlagene Syntax ergibt: "ping: unknown host dc"
Martin Rienesl

Bitte fügen Sie den relevanten Inhalt der Datei /etc/squid3/squid.confzu Ihrer Frage hinzu.
heemayl

Nicht im Kommentar, bitte bearbeiten Sie Ihre Frage und fügen Sie diese ..
Heemayl

1
Versuchen Sieping "$(grep -o '[^ ]\+$' /etc/squid3/squid.conf)"
heemayl

1
Wenn es mehr als eine Zeile gibt, die abgeglichen werden könnte, funktioniert dies nicht. Vielleicht sollten Sie den gesamten Inhalt der Datei hinzufügen.
heemayl

Antworten:


1

Der Grund dafür ist, dass die Datei /etc/squid3/squid.confmehr als eine Zeile enthält, die mit dem Muster übereinstimmt. Also, wenn du es tust

ping "$(grep ....)"

Alle durch Zeilenumbrüche getrennten Übereinstimmungen werden als einzelnes Argument übergeben, für pingdas jeweils nur eine Adresse als Argument verwendet wird.

Beachten Sie, dass Sie anstelle des verwendeten Regex-Musters die Suche nach dem letzten Wort vereinfachen können, indem Sie Folgendes verwenden:

grep -o 'dc[^ ]\+$' /etc/squid3/squid.conf

vorausgesetzt, das Wort beginnt mit dc.

Da Sie mehrere Adressen zum Überfahren haben ping, sollten Sie eine Schleife verwenden:

for i in $(grep -o 'dc[^ ]\+$' /etc/squid3/squid.conf); do ping -c 4 "$i"; done

ping -c 4 Sendet 4 ICMP-Echo_Request-Pakete an jedes Ziel.


0

Sie könnten auch verwenden awk

awk -F'-h ' '/-h +dc0[12]/ {system("ping -c 3 "$2)}'
  • -F'-h '

    Uns interessiert nur, was dahinter steckt -h.

  • /-h +dc0[12]\.domain\.local/

    Wir interessieren uns nur für die Saite dc01.domain.localunddc02.domain.local


Und viel kürzer! ;-)
Fabby
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.