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
Martin Rienesl
quelle
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.

heemayl
quelle
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

AB
quelle
Und viel kürzer! ;-)
Fabby