Der Befehl gibt für eine Datei mit Namen im MP3-Format mid3v2 -l someFile.mp3
folgende Ausgabe aus :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
Ich möchte den Wert von TPE1 t
zur weiteren Verarbeitung in einer Variablen speichern. Wie mache ich das?
Antwort1
Es gibt viele Möglichkeiten, diese Frage zu beantworten.
Der erste Schritt besteht darin, zu verstehen, dass die Ausgabe eines Befehls über eine Pipe von anderen Befehlen empfangen oder in einer Variablen erfasst werden kann:
cmd | next command ... etc
var=$(cmd)
Der Vorgang zum Auswählen einer Zeile und anschließend zum Auswählen dessen, was nach dem Zeichen steht, =
wird als „Textverarbeitung“ bezeichnet und die Shell ist hierfür nicht besonders gut geeignet.
Eine übliche Möglichkeit hierfür kann sed sein:
$ mid3v2 -l someFile.mp3 | sed -En 's/^TPE1=(.*)$/\1/p'
Singer
Und erfassen Sie das Ergebnis in einer Variablen:
$ t=$(mid3v2 -l someFile.mp3 | sed -En 's/^TPE1=(.*)$/\1/p')
$ echo "$t"
Singer
Innerhalb einer einfachen Shell gibt es kein einfaches Äquivalent. In höheren Shells (ksh, bash, zsh) ist die Verwendung von regulären Ausdrücken möglich. Welche Shell verwenden Sie?
Antwort2
Wenn Ihre Shell „Prozesssubstitution“ unterstützt, können Sie versuchen, das Ergebnis über „Source“ zu ermitteln:
. <(mid3v2 -l someFile.mp3 | grep -o "[^ ]*=[^ ]*")
t=$TPE1