While read ligne avec grep
Je suis en train de rapport les lignes à l'aide de grep et tout.
Je sais que vous pouvez utiliser les éléments suivants pour comparer une liste de chaînes de inputs.txt et de les trouver dans votre fichier cible comme suit:
grep -f inputs.txt file_to_check
Ce que je veux, c'est de lire chaque ligne de la saisie de chaînes et grep individuelle dans une boucle.
J'ai donc essayé les méthodes suivantes:
cat inputs.txt | while read line; do if grep "$line" filename_to_check; then echo "found"; else echo "not found"; fi; done
Cela renvoie rien, quand j'ai rediriger la sortie vers un fichier.
while read line
do
if grep "$line" file_to_check
then echo "found"
else
echo "not found"
fi
done < inputs.txt
Même que le premier, mais de ce que j'ai trouvé est de mieux à faire.
Je sais qu'il parcourt, ligne par ligne, parce que je peux remplacer grep avec echo $ligne et il imprime chaque ligne; mais quelle que soit la méthode ne retourne rien, comme grep -f ci-dessus, au lieu de cela, il montre:
not found
not found
not found
.
. etc.
Donc ce que je cherche, c'est quelque chose où il va itérer sur chaque ligne et de vérifier par grep à l'aide d'une instruction if pour déterminer si grep a effectivement trouvé ou non. Je sais que je ne peut pas avoir tous juste logique, mais la sortie de ce que je veux devrait ressembler à quelque chose comme:
Found *matching line in file_to_check*
Found *matching line in file_to_check*
Not Found $line *(string that does not match)*
.
. etc.
- lire les test de commandement ou
[
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également utiliser
&&
et||
opérateurs :La
-q
paramètre de la commande grep juste sorties d'un code d'état :$line
est trouvé, il outpouts0
(True), la commande après&&
seront évalués1
(False) la commande après||
sera évaluéVous pouvez réécrire votre solution finale en
Eh bien, si votre déclaration est assez libre, vous pourriez avoir besoin de les nettoyer un peu de bash pour être en mesure de le lire. Par exemple:
Cette instruction si évaluera la valeur true si la commande grep trouve la ligne, parce que si il le fait, il va cracher sur la sortie ligne et ne sera pas égale à "", ou une chaîne vide.
dos2unix
pour le convertir à la normale Unix retours à la ligne.Voici ma solution finale:
Merci encore!
if [ "$(grep "$line" filename)" != "" ]
. Il suffit de neif grep -q "$line" filename
.