gedruckt werden wenn Sie grep
als Werkzeug dafür verwenden möchten, können Sie es erreichen, indem ein anderes Segment der Pipeline ergänzt:
cmus-remote -Q | grep -A 1 "tag genre" | grep -v "tag genre"
Dies wird in Fällen fehlschlagen, wenn die Zeichenfolge die Sie suchen auf zwei Zeilen i in einer Reihe. Sie müssen definieren, welches Verhalten Sie in diesem Fall wünschen, wenn wir etwas Sinnvolles dafür programmieren wollen.
Eine andere Möglichkeit wäre, ein Tool wie awk
zu verwenden, die für eine größere Komplexität im in der Linie Auswahl erlaubt:
cmus-remote -Q | awk '/tag genre/ { getline; print }'
Diese für die Zeichenfolge sucht, wird dann die nächste Zeile, druckt es dann.
Eine andere Möglichkeit wäre dies allein in bash zu tun:
while read line; do
[[ $line =~ tag\ genre ]] && read line && echo "$line"
done < <(cmus-remote -Q)
Dies implementiert die gleiche Funktionalität wie die awk-Skript, erst gar keine externen Tools. Es ist wahrscheinlich langsamer als das Awk-Skript.
Was ist nur die RE mit einem anderen Rohr ohne? 'cmus-remote -Q | grep -A 1 "Taggenre" | grep -v "tag genre" '? Es scheitert natürlich, wenn der RE auf zwei Zeilen hintereinander steht. – ghoti
Wenn Ihr 'grep'' -P' Option unterstützt, dann ist es so einfach, 'grep-oPz 'Taggenre. * \ N \ K. *' Datei' –