बैश स्क्रिप्ट-फू, आउटपुट के बीच से पाठ प्राप्त करने का तरीका (यादृच्छिक स्पॉट)


2

इसलिए मूल रूप से, मैं एक एमपी 3 प्रोग्राम से रेटिंग प्राप्त करने की कोशिश कर रहा हूं, और कमांड लाइन टूल id3v2 का उपयोग करके, मैं उस रेटिंग को प्राप्त कर सकता हूं जिसे मेरा प्रोग्राम इसे डालता है:

$ 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

जिसे मैं नीचे संकीर्ण कर सकता हूं

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

संकट:

मुझे यकीन नहीं है कि मैं इस स्ट्रिंग से 'रेटिंग = ###' कैसे प्राप्त कर सकता हूं। मेरा awk / sed-fu कमजोर है :(

जवाबों:



1

आप grepइस एक कॉल का उपयोग करके दो कॉल से बच सकते हैं sed:

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

आप चुन सकते हैं कि बैकरेफ़रेंस निकालकर क्या आउटपुट देना है। आपके उदाहरण में, बैकरेफरेंस निम्न आउटपुट देता है:

  • \1 - रेटिंग =
  • \2 - 196
  • \3 - कॉम

साथ में: "रेटिंग = 196COMM"


आपको grep की दो कॉल की आवश्यकता क्यों है?
एंडी

@Andy: ओपी grep POPMप्लस आपका grep -o ...
डेनिस विलियमसन

मुझे लगता है कि यह सब एक grep कॉल में किया जा सकता है।
एंडी

@ और: मैं वह देखना चाहूंगा।
डेनिस विलियमसन

1
हाँ, मैंने यह सुनिश्चित करने के लिए मूल grep POPM रखा कि मुझे सही डेटा मिल रहा है। कभी नहीं पता कि कब कुछ बैंड "रेटिंग = 255" लोल नाम के गाने के साथ आने वाला है
रॉय रिको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.