Как вернуть только часть строки с помощью egrep - PullRequest
1 голос
/ 05 сентября 2010

У меня есть программа, которая возвращает что-то вроде этого:

status: playing
artURL: http://beta.grooveshark.com/static/amazonart/m3510922.jpg
estimateDuration: 29400
calculatedDuration: 293000
albumName: This Is It
position: 7291.065759637188
artistName: Michael Jackson
trackNum: 13
vote: 0
albumID: 3510922
songName: Billie Jean
artistID: 39
songID: 24684170

Я ищу, чтобы извлечь имя исполнителя и название песни из всего этого, и я подумал, что egrep будет хорошим способом сделать это,Проблема в том, что я понятия не имею, как вернуть только часть совпадающей строки, а не всю строку.

egrep "artistName" очевидно возвращает

artistName: Michael Jackson

Мне нужно только это вернуть

Michael Jackson

Любая помощь будет оценена.Спасибо.

Ответы [ 3 ]

3 голосов
/ 05 сентября 2010

С GNU grep, который поддерживает регулярные выражения Perl:

grep -Po '(?<=^artistName: ).*' filename
3 голосов
/ 05 сентября 2010

Вам нужно будет передать вывод в другую программу, например, cut:

egrep ^artistName | cut -d ' ' -f 2-

Или вы можете сделать все это в awk или sed:

awk -F ': ' '/^artistName/ {print $2}'
sed -n '/^artistName/ {s/.*: //;p;}' 
1 голос
/ 06 сентября 2010

ваши данные структурированы и имеют отдельный разделитель полей (:), поэтому вы можете использовать awk

awk '$1~/^(artistName|songName)/{print $2}' file
...