【问题标题】:How to return only part of a line with egrep如何用 egrep 只返回一行的一部分
【发布时间】:2010-09-05 15:57:52
【问题描述】:

我有一个程序返回如下内容:

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

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: linux unix shell grep


    【解决方案1】:

    您需要将输出通过管道传输到另一个程序,例如 cut:

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

    或者您可以在 awk 或 sed 中完成所有操作:

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

    【讨论】:

      【解决方案2】:

      使用支持 Perl 正则表达式的 GNU grep

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-03
          • 1970-01-01
          • 2013-03-25
          • 1970-01-01
          • 2022-01-01
          • 2019-05-06
          相关资源
          最近更新 更多