该命令为名称为 mp3 格式的mid3v2 -l someFile.mp3
文件提供以下输出:someFile.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)
选择一行并进一步选择符号后面的内容的过程=
称为“文本处理”,而 shell 不太适合执行此操作。
一种常见的方法是 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
简单 shell 内没有简单的等价物。在更高的 shell(ksh、bash、zsh)上可以使用正则表达式。您使用哪种外壳?
答案2
鉴于您的 shell 提供了“进程替换”,您可以尝试“采购”结果:
. <(mid3v2 -l someFile.mp3 | grep -o "[^ ]*=[^ ]*")
t=$TPE1