Guardar la salida de un comando en una variable

Guardar la salida de un comando en una variable

El comando mid3v2 -l someFile.mp3 proporciona el siguiente resultado para un archivo con nombre someFile.mp3en 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 tpara 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

información relacionada