Команда mid3v2 -l someFile.mp3
выдает следующий вывод для файла с именем someFile.mp3
в формате mp3:
IDv2 tag info for someFile.mp3
APIC=cover front, (image/jpg, 52016 bytes)
TALB=someAlbumName
TCON=amusicGenre
TDRC=2000
TIT2=songname
TPE1=singer
TPE2=singer
TRCK=1
Я хотел бы сохранить значение TPE1 в переменной t
для дальнейшей обработки. Как это сделать?
решение1
Есть много способов ответить на этот вопрос.
Первый шаг — понять, что вывод команды может быть получен другими командами через канал или может быть захвачен в переменной:
cmd | next command ... etc
var=$(cmd)
Процесс выбора строки и последующего выбора того, что находится после знака, =
называется «обработкой текста», и оболочка не очень хорошо подходит для этого.
Распространенным способом сделать это может быть sed:
$ mid3v2 -l someFile.mp3 | sed -En 's/^TPE1=(.*)$/\1/p'
Singer
И сохраним результат в переменной:
$ t=$(mid3v2 -l someFile.mp3 | sed -En 's/^TPE1=(.*)$/\1/p')
$ echo "$t"
Singer
Внутри простой оболочки нет простого эквивалента. В более высоких оболочках (ksh,bash,zsh) можно использовать regex. Какую оболочку вы используете?
решение2
Учитывая, что ваша оболочка обеспечивает «подстановку процесса», вы можете попробовать «извлечь» результат:
. <(mid3v2 -l someFile.mp3 | grep -o "[^ ]*=[^ ]*")
t=$TPE1