Как использовать вывод grep для ping

Я отчаянно пытаюсь использовать вывод grep для сценария:

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

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

Оба возврата:

ping: unknown host dc02.domain.local

Если я ввожу ping dc02.domain.local, это работает! Я не вижу, что я делаю неправильно?

Соответствующая строка/etc/squid3/squid.conf:

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
0
задан 16 September 2015 в 17:55

2 ответа

Причиной сбоя является то, что файл /etc/squid3/squid.conf содержит более одной строки, соответствующей шаблону. Поэтому, когда вы выполняете

ping "$(grep ....)"

, все совпадения, разделенные символом новой строки, передаются как один аргумент в ping, который принимает в качестве аргумента только один адрес, следовательно, он терпит неудачу.

Обратите внимание, что вместо использования шаблона Regex, который вы использовали, вы можете упростить сопоставление последнего слова, используя:

grep -o 'dc[^ ]\+ 

, предполагая, что слово начинается с dc.

Наконец, поскольку у вас есть несколько адресов для запуска ping, вы должны использовать цикл:

for i in $(grep -o 'dc[^ ]\+ 

ping -c 4 отправит 4 пакета ICMP Echo_Request каждому получателю.

/etc/squid3/squid.conf); do ping -c 4 "$i"; done

ping -c 4 отправит 4 пакета ICMP Echo_Request каждому получателю.

/etc/squid3/squid.conf

, предполагая, что слово начинается с dc.

Наконец, поскольку у вас есть несколько адресов для запуска ping, вы должны использовать цикл:

for i in $(grep -o 'dc[^ ]\+ 

ping -c 4 отправит 4 пакета ICMP Echo_Request каждому получателю.

/etc/squid3/squid.conf); do ping -c 4 "$i"; done

ping -c 4 отправит 4 пакета ICMP Echo_Request каждому получателю.

1
ответ дан 1 October 2019 в 01:35

Вы могли также использовать awk

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

    Мы интересуемся только, что находится позади -h.

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

    Мы интересуемся только строкой dc01.domain.local и dc02.domain.local

0
ответ дан 1 October 2019 в 01:35

Другие вопросы по тегам:

Похожие вопросы: