Как составить регулярку для bash?

Всем привет.
В баше понимаю очень плохо. Нужна помощь знатоков.

Выполняю команду
avprobe orig/BELS.m4a
получаю следующее

avprobe version 9.16-6:9.16-0ubuntu0.14.04.1, Copyright (c) 2007-2014 the Libav developers
  built on Aug 10 2014 18:16:02 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x2183fe0] max_analyze_duration reached
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './orig/BELS.m4a':
  Metadata:
    major_brand     : M4A 
    minor_version   : 0
    compatible_brands: M4A mp42isom
    creation_time   : 2009-04-30 21:50:53
    track           : 5/8
    album           : Technical Ecstasy
    artist          : Black Sabbath
    title           : All Moving Parts (Stand Still)
    encoder         : iTunes 8.1.1.10
    date            : 1976
    gapless_playback: 1
    genre           : Музыка
  Duration: 00:05:07.38, start: 0.000000, bitrate: 966 kb/s
    Stream #0.0(und): Audio: alac, 44100 Hz, stereo, s16p, 956 kb/s
    Metadata:
      creation_time   : 2009-04-30 21:50:53
    Stream #0.1: Video: mjpeg, yuvj420p, 300x300, 90k tbn
# avprobe output


Как мне записать регулярные выражения, чтоб вычленить параметры "track", "album", "artist" и т.д. и записать их в переменные?

Спасибо
  • Вопрос задан
  • 2383 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Z-r
Регулярные выражения не нужны.

file="my.mp3"
declare -A MP3
while read line; do
    [[ $line == *[^=]=[^=]* ]] || continue
    IFS='=' read key value <<< "$line"
    [[ -n $key ]] || continue
    MP3[$key]="$value"
done <\
    <(ffprobe 2>&- -show_entries format "$file")
echo "${MP3[TAG:artist]}" 
echo "${MP3[TAG:album]}"
echo "${MP3[TAG:title]}"


Комментарии нужны?
Ответ написан
Комментировать
@ldvldv
title=$(avprobe orig/BELS.m4a | sed -rn 's/\s+title\s+:\s+//p')
album=$(avprobe orig/BELS.m4a | sed -rn 's/\s+album\s+:\s+//p')
artist=$(avprobe orig/BELS.m4a | sed -rn 's/\s+artist\s+:\s+//p')
Ответ написан
3vi1_0n3
@3vi1_0n3
Можно так, практически в одну строчку:
#!/bin/bash
. <(avprobe orig/BELS.m4a | grep "title\|album\|artist" | sed -r 's/\s*([^ ]*)\s*:\s*(.*)$/\1=\"\2\"/')
echo $album
echo $title
echo $artist
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы