Если вы хотите использовать grep
в качестве инструмента для этого, вы можете достичь его, добавив еще один сегмент вашего трубопровода:
cmus-remote -Q | grep -A 1 "tag genre" | grep -v "tag genre"
Это потерпит неудачу в тех случаях, когда строка, которую вы ищете на двух строках я n строка. Вы должны будете определить, какое поведение вы хотите в этом случае, если мы собираемся запрограммировать что-то разумное для этого.
Другой возможностью было бы использовать такой инструмент, как awk
, что позволяет более макетов в выборе линии:
cmus-remote -Q | awk '/tag genre/ { getline; print }'
Это ищет строки, а затем получает следующую строку, а затем выводит его.
Другой возможностью было бы сделать это в одиночку Баш:
while read line; do
[[ $line =~ tag\ genre ]] && read line && echo "$line"
done < <(cmus-remote -Q)
Это реализует такую же функциональность как сценарий AWK, только не используя никаких внешних инструментов вообще. Это скорее медленнее, чем awk-скрипт.
А что только за исключением RE с другой трубой? 'cmus-remote -Q | grep -A 1 "tag genre" | grep -v "tag genre" '? Это терпит неудачу, если RE находится на двух строках подряд, конечно. – ghoti
Если ваш 'grep' поддерживает опцию' -P', тогда это так просто, жанр тегов grep -oPz. * \ N \ K. * 'file' –