bash script-fu, Weg, um Text aus der Mitte der Ausgabe zu bekommen (zufällige Stellen)


2

Im Grunde genommen versuche ich, die Bewertung von einem MP3-Programm zu erhalten. Mit dem Befehlszeilentool id3v2 kann ich die Bewertung erhalten, in die mein Programm sie schreibt:

$ id3v2 -R Drake\ -\ Over3.mp3
id3v1 tag info for Drake - Over3.mp3:
Title  : Over                            Artist: Drake
Album  : Thank Me Later                  Year: 2010, Genre: Unknown (255)
Comment: The highly anticipated debut    Track: 0
id3v2 tag info for Drake - Over3.mp3:
TPE2 (Band/orchestra/accompaniment): Drake
TIT2 (Title/songname/content description): Over
TPE1 (Lead performer(s)/Soloist(s)): Drake
TALB (Album/Movie/Show title): Thank Me Later
TYER (Year): 2010
TCON (Content type): Rap - Hip-Hop (255)
TPUB (Publisher): Cash money/Universal Motown
POPM (Popularimeter): Windows Media Player 9 Series, counter=0 rating=196COMM (Comments): (MusicMatch_Preference)[eng]: Very Good
COMM (Comments): ()[eng]: The highly anticipated debut from Drake is here! "Thank Me Later" is hotest album in the game.
APIC (Attached picture): ()[, 3]: image/jpg, 38227 bytes
COMM (Comments): (ID3v1 Comment)[XXX]: The highly anticipated debut
TRCK (Track number/Position in set): PUB

Worauf ich eingrenzen kann

$ id3v2 -R Drake\ -\ Over3.mp3 | grep POPM
POPM (Popularimeter): Windows Media Player 9 Series, counter=0 rating=196COMM (Comments): (MusicMatch_Preference)[eng]: Very Good

Problem:

Ich bin mir nicht sicher, wie ich aus dieser Zeichenfolge 'rating = ###' erhalten kann. Mein awk / sed-fu ist schwach :(

Antworten:


3

grep -o 'rating=[[:digit:]]\+'

Funktioniert bei mir...


1

Sie können vermeiden, zwei Aufrufe grepvon zu verwenden, indem Sie diesen einen Aufruf von verwenden sed:

id3v2 -R Drake\ -\ Over3.mp3 | sed -n '/POPM/s/.*[[:blank:]]\(rating=\)\([[:digit:]]\+\)\([^[:blank:]]*\)[[:blank:]].*/\1\2\3/p'

Sie können auswählen, was ausgegeben werden soll, indem Sie die Rückverweise entfernen. In Ihrem Beispiel geben die Rückverweise Folgendes aus:

  • \1 Bewertung =
  • \2 - 196
  • \3 - KOMM

Together: "rating = 196COMM"


Warum brauchst du zwei grep-Anrufe?
Andy

@Andy: Das OP ist grep POPMplus dein grep -o ....
Dennis Williamson

Ich denke, dass alles mit einem grep-Aufruf erledigt werden kann.
Andy

@Andy: Das würde ich gerne sehen.
Dennis Williamson

1
Ja, ich habe das ursprüngliche grep-POPM beibehalten, um sicherzustellen, dass ich die richtigen Daten erhalte. Ich weiß nicht, wann eine Band einen Song mit dem Namen "rating = 255" veröffentlichen wird. Lol
Roy Rico
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.