El comando mid3v2 -l someFile.mp3
proporciona el siguiente resultado para un archivo con nombre someFile.mp3
en formato 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
Me gustaría almacenar el valor de TPE1 en una variable t
para su posterior procesamiento. ¿Cómo puedo hacer esto?
Respuesta1
Hay muchas maneras de responder a esta pregunta.
El primer paso es comprender que la salida de un comando podría ser recibida por otros comandos a través de una tubería o podría capturarse en una variable:
cmd | next command ... etc
var=$(cmd)
El proceso para seleccionar una línea y seleccionar aún más lo que hay después del signo =
se llama "procesamiento de texto" y el shell no es adecuado para hacerlo.
Una forma común de hacerlo puede ser sed:
$ mid3v2 -l someFile.mp3 | sed -En 's/^TPE1=(.*)$/\1/p'
Singer
Y capturar el resultado en una variable:
$ t=$(mid3v2 -l someFile.mp3 | sed -En 's/^TPE1=(.*)$/\1/p')
$ echo "$t"
Singer
No existe un equivalente simple dentro de un shell simple. En shells superiores (ksh,bash,zsh) es posible utilizar expresiones regulares. ¿Qué caparazón usas?
Respuesta2
Dado que su shell proporciona "sustitución de procesos", puede intentar "obtener" el resultado:
. <(mid3v2 -l someFile.mp3 | grep -o "[^ ]*=[^ ]*")
t=$TPE1