Speichern Sie die Ausgabe eines Befehls in einer Variablen

Speichern Sie die Ausgabe eines Befehls in einer Variablen

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 tzur 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

verwandte Informationen