So ändern Sie die grep-Ausgabe:Holen Sie sich jedes Ergebnis in jeder Zeile
Frage
Ich verwende grep, um ein Muster in einer Datei zu durchsuchen, die in einer Variablen enthalten ist
Code hier:
result=`grep "$pattern" $file`
echo $result
Ergebnis:A) einige Wörter, B) einige Zeilen, C) einige Zahlen
Druckergebnis in einer Zeile.Ich hätte gerne ein Ergebnis für Zeile a
Wie:
A) somewords
B) somelines
C) somenumbers
Wie kann ich?
Danke
Lösung
Zitieren Sie einfach Ihre $result
Variable und die Zeilenumbrüche bleiben erhalten:
result=$(grep "$pattern" $file)
echo "$result"
Der Grund dafür ist, dass, wenn Sie in der Bash etwas in doppelte Anführungszeichen setzen, alles in diesen Anführungszeichen als ein einzelnes Wort behandelt wird.Dies bedeutet, dass es nicht unterliegt Wortaufteilung.Siehe auch: http://mywiki.wooledge.org/WordSplitting
Effektiv, wenn Sie es verwenden $result
, wird es wie folgt erweitert (da die Zeilenumbrüche als Trennzeichen behandelt werden):
echo A) somewords B) somelines C) somenumbers
Wenn Sie verwenden "$result"
und vermeiden Sie die Wortaufteilung, es wird wie folgt erweitert:
echo "A) somewords
B) somelines
C) somenumbers"
Zusätzliche Anmerkung:verwenden $(...)
anstelle von Backticks verbessert die Lesbarkeit und ist außerdem tragbarer.