J'ai un fichier texte qui répertorie un nom d'hôte et dans la ligne directement sous indique les résultats d'un ping d'un minion de sel. Voici un exemple de sortie :
T5F6Z12:
Minion did not return. [Not connected]
Je dois d'abord être en mesure d'identifier si le texte (Minion n'est pas revenu) existe et si c'est le cas, saisissez le nom d'hôte associé à l'erreur afin que je puisse exécuter d'autres commandes sur ce serveur.
J'ai commencé par ceci :
if grep -q "Minion" /srv/salt/test/ping_results
then
Je suis donc presque sûr que je dois chercher le mot "Minion" car il n'apparaîtra que pour les serveurs qui ont échoué au test. Mais une fois que j'ai identifié son existence, je ne sais pas comment récupérer le nom d'hôte associé au-dessus dans le fichier texte.
Réponse acceptée :
Vous pouvez utiliser -B1
pour imprimer également la ligne précédente, puis saisir uniquement la première ligne :
$ grep -B1 'Minion' ip.txt
T5F6Z12:
Minion did not return. [Not connected]
$ grep -B1 'Minion' ip.txt | head -n1
T5F6Z12:
Ou faites-le avec awk
:
$ awk '/Minion/{print p} {p=$0}' ip.txt
T5F6Z12:
$ awk '/Minion/{sub(/:$/, "", p); print p} {p=$0}' ip.txt
T5F6Z12
Ici p
conserve la sauvegarde de la dernière ligne. Lorsque la ligne d'entrée contient Minion
, puis il est imprimé. Notez que cela fonctionnera pour plusieurs correspondances contrairement au grep
solution ci-dessus qui ne donne que la première correspondance.