/ / Verwenden von 'if' innerhalb einer 'while' Schleife in Bash - bash, Schleifen, if-Anweisung, while-Schleife

Verwenden von 'if' innerhalb einer 'while' Schleife in Bash - bash, Schleifen, if-Anweisung, while-Schleife

Ich habe diese Ergebnisse in einer Datei gespeichert:

bash-3.00$ cat /tmp/voo
18633a18634
> sashabrokerSTP
18634a18636
> sashatraderSTP
21545a21548
> yheemustr

Ich brauche nur die Logins:

bash-3.00$ cat /tmp/voo | egrep ">|<"
> sashaSTP
> sasha
> yhee
bash-3.00$

Aber wenn ich versuche, durch den Saum zu iterieren und nur die Namen zu drucken, bekomme ich Fehler. Ich verstehe einfach nicht die Grundlagen der Verwendung von "Wenn" mit "While-Schleifen". Letztendlich möchte ich das verwenden while Schleife, weil ich etwas zu den Linien machen will - und anscheinend while lädt nur eine Zeile gleichzeitig in den Speicher, im Gegensatz zur gesamten Datei auf einmal.

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$

Es muss eine Möglichkeit geben, die Datei zu durchlaufen und dann für jede Zeile etwas zu tun. So was:

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$

Antworten:

4 für die Antwort № 1

Sie sollten nachsehen >nicht <, Nein?

while read line; do
if [[ $line =~ ">" ]]; then
echo $line
fi
done < /tmp/voo

3 für die Antwort № 2

Brauchst du wirklich Regex hier? Der folgende Shell-Glob kann auch funktionieren:

while read line; do [[ "$line" == ">"* ]] && echo "$line"; done < /tmp/voo

ODER benutze AWK:

awk "/^>/ { print "processing: " $0 }" /tmp/voo

1 für die Antwort № 3

grep Wird besorgt:

$ grep -oP "> Kw+" <<END
18633a18634
> sashabrokerSTP
18634a18636
> sashatraderSTP
21545a21548
> yheemustr
END
sashabrokerSTP
sashatraderSTP
yheemustr