我正在为我的应用程序解析mp3文件的IDv3标签,我正在使用id3v2.例如,要获取mp3文件的专辑名称,命令是
id3v2 -R sample.mp3 | grep "TALB"
哪个输出
TALB: Album Name
但是,我想只得到TALB的值,而不是整行,所以我将它传递给sed,如下所示
id3v2 -R sample.mp3 | grep "TALB" | sed 's/TALB: //'
哪个输出
Album Name
所以,这是我的问题:
>只有grep可以实现上述结果.如果是这样,我该怎么办?
>即使我得到了我想要的结果,但是当我在寻找像TCON这样的其他标签时,它会返回example.com(255),其中我只需要example.com.那么,我如何在这种类型的grep中编写正则表达式?
解决方法
您可以将Perl样式的正则表达式与-P标志一起使用:
grep -Po '(?<=TALB: ).*'
例如:
$echo "TALB: Album Name" | grep -Po '(?<=TALB: ).*' Album Name
(?< = TALB :)是一个zero-width look-behind assertion.*是你要匹配的其他东西的模式 – 在第一种情况下,一切.如果您只想匹配标记字符串后面的特定字符串,就像在第二个问题中那样,那么您可以更改它以适合您的特定数据.