web-dev-qa-db-fra.com

Lire des lignes et match contre le motif

Je ne peux pas comprendre cela. J'ai besoin de regarder toutes les lignes dans le fichier et de vérifier s'il s'agit d'un mot correspondant à la variable

J'ai commencé par la lecture de commandement, mais je ne sais pas ce que je suis censé utiliser après cela, j'ai essayé grep mais je l'ai probablement utilisé à tort.

while read line; do 
if [ $condition  ] ;then echo "ok" fi
done<file.txt
6
applenic

Voici un quickie pour vous, tout simplement ce que nous faisons est

Ligne 1: Tout en lisant le fichier dans la variable line

Ligne 2: Faites correspondre une regex, écho le $line si correspondant au mot "oiseau" écho cette ligne. Faites toutes les actions dont vous avez besoin ici, dans cette déclaration.

Ligne 3: fin de la boucle, quels pipes dans le fichier foo.text

#!/bin/bash
while read line; do
  if [[ $line =~ bird ]] ; then echo $line; fi
done <foo.text

Notez que "oiseau" est une regex. Afin que vous puissiez le remplacer par exemple: bird.*Word Pour faire correspondre la même ligne avec une expression régulière.

Essayez-le avec un fichier comme tellement, appelé foo.text Avec le contenu:

my dog is brown
her cat is white
the bird is the Word
7
dougBTV

Le moyen plus facile de le faire, utilise grep (ou egrep).

grep bird file.txt
5
steviethecat

Voici un script simple qui passe dans deux arguments (nom de fichier et variable) ... Il y a aussi une version codée en dur que cela.

#!/bin/bash

[ $# -lt 2 ] && echo "wrong number of args" && exit 1
file=$1
var=$2
while read line; do
    if  echo "$line" | grep -q "$var"; then echo "ok"; fi
done < "$file"
exit 0

[user@myserver ~]$ myscript file.txt some_text

Alternativement, si vous préférez coder le fichier (et la variable) plutôt que de passer comme des arguments ...

while read line; do
    if  echo "$line" | grep -q "some_text"; then echo "ok"; fi
done < file.txt
0
Bradley D