如何仅使用egrep返回部分行

时间:2010-09-05 15:57:53

标签: linux unix shell grep

我有一个返回这样的程序:

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 个答案:

答案 0 :(得分:3)

您需要将输出传递给另一个程序,例如cut:

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

或者你可以用awk或sed完成整个事情:

awk -F ': ' '/^artistName/ {print $2}'
sed -n '/^artistName/ {s/.*: //;p;}' 

答案 1 :(得分:3)

GNU grep支持Perl正则表达式:

grep -Po '(?<=^artistName: ).*' filename

答案 2 :(得分:1)

您的数据是结构化的,并且具有不同的字段分隔符(:),因此您可以使用awk

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