À l'aide de " si "dans un" tout " en boucle dans Bash
J'ai th diff résultats enregistrés dans un fichier:
bash-3.00$ cat /tmp/voo
18633a18634
> sashabrokerSTP
18634a18636
> sashatraderSTP
21545a21548
> yheemustr
J'ai vraiment besoin de connexions:
bash-3.00$ cat /tmp/voo | egrep ">|<"
> sashaSTP
> sasha
> yhee
bash-3.00$
Mais quand j'essaie d'itérer sur l'ourlet et il suffit d'imprimer les noms j'ai des erreurs.
Je n'arrive pas à comprendre les principes de base de l'utilisation de "si" avec des "boucles " while".
En fin de compte, je veux utiliser le while
boucle parce que je veux faire quelque chose pour les lignes - et apparemment while
charge uniquement une ligne dans la mémoire à un moment, par opposition à l'ensemble du dossier à la fois.
bash-3.00$ while read line; do if [[ $line =~ "<" ]] ; then echo $line ; fi ; done < /tmp/voo
bash-3.00$
bash-3.00$
bash-3.00$ while read line; do if [[ egrep "<" $line ]] ; then echo $line ; fi ; done < /tmp/voo
bash: conditional binary operator expected
bash: syntax error near `"<"'
bash-3.00$
bash-3.00$ while read line; do if [[ egrep ">|<" $line ]] ; then echo $line ; fi ; done < /tmp/voo
bash: conditional binary operator expected
bash: syntax error near `|<"'
bash-3.00$
Il y a une sorte de boucle si le fichier puis faire quelque chose pour chaque ligne. Comme ceci:
bash-3.00$ while read line; do if [[ $line =~ ">" ]];
then echo $line | tr ">" "+" ;
if [[ $line =~ "<" ]];
then echo $line | tr "<" "-" ;
fi ;
fi ;
done < /tmp/voo
+ sashab
+ sashat
+ yhee
bash-3.00$
- Ne citez pas votre regex dans Bash 4.x.
Vous devez vous connecter pour publier un commentaire.
Vous devriez vérifier pour
>
, pas<
, non?Avez-vous vraiment besoin de regex ici? Le shell suivante glob pouvez également travailler:
OU utiliser AWK:
grep
fera: