Regex 正则表达式匹配两个字符串之间所有字符的最后一次出现

Regex 正则表达式匹配两个字符串之间所有字符的最后一次出现,regex,linux,bash,awk,sed,Regex,Linux,Bash,Awk,Sed,我正在尝试从torrent文件中提取torrent名称。 没有深入研究torrent文件的结构,我注意到我只需要匹配两个字符串之间最后出现的所有字符,在我的例子中是:*12:piece lengthi 以下是Arch Linux iso torrent文件的开头: d8:announce42:http://tracker.archlinux.org:6969/announce7:comment41:Arch Linux 2015.07.01 (www.archlinux.org)10:creat

我正在尝试从torrent文件中提取torrent名称。 没有深入研究torrent文件的结构,我注意到我只需要匹配两个字符串之间最后出现的所有字符,在我的例子中是
*
12:piece lengthi

以下是Arch Linux iso torrent文件的开头:

d8:announce42:http://tracker.archlinux.org:6969/announce7:comment41:Arch Linux 2015.07.01 (www.archlinux.org)10:created by13:mktorrent 1.013:creation datei1435770645e4:infod6:lengthi677380096e4:name29:archlinux-2015.07.01-dual.iso12:piece lengthi

我需要提取
archlinux-2015.07.01-dual.iso
,它介于
12:piece lengthi
之间。我检查了这个模式与其他torrent文件在我的情况下,它会工作!我不知道如何组合正则表达式
(?我会使用
sed
,如下所示:

sed 's/.*:\(.*\)12:piece lengthi/\1/' input.torrent

用GNU grep试试这个:

 grep -oP ':\K[^:]*(?=12:piece lengthi$)' file
输出:

archlinux-2015.07.01-dual.iso archlinux-2015.07.01-dual.iso 试试这个:

 sed -e 's/12:piece lengthi//' -e 's/.*://'

必须有一些工具可以让你检查一个torrent文件,这样你才能更正确地使用它?也就是说,这似乎是一组
length:value
对,所以你可以更好地实际解析它。(尽管你的粗略拆分也会起作用。) archlinux-2015.07.01-dual.iso
 sed -e 's/12:piece lengthi//' -e 's/.*://'