Você pode usar algo assim:
#!/bin/bash
file="result.log"
changed='grep -Po "changed=\K\d+" $file'
unreachable='grep -Po "unreachable=\K\d+" $file'
failed='grep -Po "failed=\K\d+" $file'
if [ $changed -ge 1 -a $unreachable -eq 0 -a $failed -eq 0 ]
then
cut -s -f1 -d: $file | tr -s ' '
fi
Primeiramente nós extraímos todos os valores necessários e os comparamos com os que você deseja, se eles coincidirem, nós imprimimos o nome do host.
-
grep -Po "changed=\K\d+
retorna o número na frente de "alterado" - instrução IF:
-
$changed -ge 1
se alterado for maior que igual a "1" -
-a
e -
$unreachable -eq 0
inacessível foi igual a "0" -
-a
e -
$failed -eq 0
falhou foi igual a "0", então:
-
-
cut -s -f1 -d: $file | tr -s ' '
imprime o nome do host