Script Bash - Vérifier si un fichier contient une ligne spécifique
J'ai besoin de 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 à l'intérieur d'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 de plusieurs lignes.
Est-il une raison pour laquelle vous ne l'utilisez pas
grep(1)
?OriginalL'auteur user3472065 | 2014-04-04
Vous devez vous connecter pour publier un commentaire.
si
$FILE
contient le nom de fichier et$STRING
contient la chaîne à rechercher,ensuite, vous pouvez afficher si le fichier correspond à l'aide de la commande suivante:
à mon humble avis ce ne sont pas vraiment répondre à la question, car il fera également rapport "TROUVÉ" si $STRING fait partie d'une ligne. La question était à propos de la présence d'un groupe spécifique de ligne:.
grep "^$STRING"'$'
vient à l'esprit, mais n'est pas assez général ici que la CHAÎNE de caractères peut contenir certains éléments qui pourraient être confondu avec des regex. Cela s'applique également à la solution présentée.OriginalL'auteur fstab
Sondage l'heure de modification du fichier et grep pour la chaîne quand elle change:
Remarque: BSD les utilisateurs doivent utiliser
stat -f%m
OriginalL'auteur Cole Tierney
Essayer:
Ce sera continuellement en boucle sans attendre, vous voudrez peut-être ajouter une période d'attente (par exemple 5 secondes dans cet exemple):
grep -q
devraient être privilégiées: si elle trouve de la chaîne, de ne pas avoir à lire la totalité du fichier:[[ -f "$f" ]] && grep -q "$str" "$f" && break
Certainement une amélioration, merci. Édité réponse.
OriginalL'auteur Josh Jolly
Plus rigoureux vérifier pour tester si un ligne $CHAÎNE est contenue dans un fichier le FICHIER de
En particulier, les adresses de mes préoccupations avec @fstab de la réponse (qui s'applique également à tous les autres réponses précédentes): Il vérifie la ligne complète et pas seulement pour les sous-chaîne de la présence au sein d'une ligne (comme l'a fait avec la commande grep solutions à partir de ci-dessus).
La boucle peut être fait, comme indiqué dans les autres réponses.
OriginalL'auteur Holger Brandl