Je dois vérifier si un fichier contient une ligne spécifique. Ce fichier est écrit continuellement par quelqu'un, donc j'ai mis le chèque dans une boucle while.
FILE="/Users/test/my.out"
STRING="MYNAME"
EXIT=1
while [ $EXIT -ne 0 ]; do
if [ -f $FILE ] ; then CHECK IF THE "STRING" IS IN THE FILE - IF YES echo "FOUND"; EXIT=0; fi
done
Le fichier contient du texte et plusieurs lignes.
si $FILE
contient le nom du fichier et $STRING
contient la chaîne à rechercher, vous pouvez alors afficher si le fichier correspond à l'aide de la commande suivante:
if [ ! -z $(grep "$STRING" "$FILE") ]; then echo "FOUND"; fi
Interroge l'heure de modification du fichier et grep pour la chaîne lorsqu'elle change:
while :; do
a=$(stat -c%Y "$FILE") # GNU stat
[ "$b" != "$a" ] && b="$a" && \
grep -q "$STRING" "$FILE" && echo FOUND
sleep 1
done
Remarque: les utilisateurs BSD doivent utiliser stat -f%m
Essayer:
while : ;do
[[ -f "$FILE" ]] && grep -q "$STRING" "$FILE" && echo "FOUND" && break
done
Cela bouclera en continu sans attendre, vous voudrez peut-être ajouter une période d'attente (par exemple 5 secondes dans cet exemple):
while : ;do
[[ -f "$FILE" ]] && grep -q "$STRING" "$FILE" && echo "FOUND" && break
sleep 5
done
Une vérification plus rigoureuse pour tester si un ligne $ STRING donné est contenu dans un fichier FILE serait
awk '$0 == "'${STRING}'"' $FILE
Cela répond en particulier à mes préoccupations concernant la réponse de @ fstab (qui s'applique également à toutes les autres réponses précédentes): il vérifie la ligne complète et pas seulement la présence de sous-chaîne dans une ligne (comme cela est fait avec les solutions grep ci-dessus).
La boucle pourrait être effectuée comme indiqué dans les autres réponses.