Salvar a saída de um comando em uma variável

Salvar a saída de um comando em uma variável

O comando mid3v2 -l someFile.mp3 fornece a seguinte saída para um arquivo com nome someFile.mp3no 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

Gostaria de armazenar o valor de TPE1 em uma variável tpara processamento posterior. Como posso fazer isso?

Responder1

Há muitas maneiras de responder a essa pergunta.
O primeiro passo é entender que a saída de um comando pode ser recebida por outros comandos através de um pipe, ou pode ser capturada em uma variável:

cmd | next command ... etc
var=$(cmd)

O processo para selecionar uma linha e selecionar o que vem depois do sinal =é chamado de "processamento de texto" e o shell não é adequado para isso.

Uma maneira comum de fazer isso pode ser sed:

 $ mid3v2 -l someFile.mp3 | sed -En 's/^TPE1=(.*)$/\1/p'
 Singer

E capture o resultado para uma variável:

$ t=$(mid3v2 -l someFile.mp3 | sed -En 's/^TPE1=(.*)$/\1/p')
$ echo "$t"
Singer

Não existe um equivalente simples dentro de um shell simples. Em shells superiores (ksh,bash,zsh) é possível usar regex. Qual concha você usa?

Responder2

Dado que seu shell fornece "substituição de processo", você pode tentar "fornecer" o resultado:

. <(mid3v2 -l someFile.mp3 | grep -o "[^ ]*=[^ ]*")
t=$TPE1

informação relacionada