Сохранить вывод команды в переменную

Сохранить вывод команды в переменную

Команда 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

Связанный контент