À 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.
InformationsquelleAutor capser | 2013-12-03