在单个字符串中的两个模式之间搜索多个结果

在单个字符串中的两个模式之间搜索多个结果

我在解析一些数据时遇到问题。

我的文件如下:

bliblablo-/interestingdata1UUUUUUUUUUUUUUU/-blublu-/interestingdata2UUUUUUUUUUUUUUU/-blybly-/etcetcetc

我需要得到:

interestingdata1
interestingdata2

当我只有一个这样的“有趣的数据”时:

bliblablo-/interestingdata1UUUUUUUUUUUUUUU/-bl

以下命令对我有用:

cat file | sed -E 's/.*[-][/](.*)[U]{15}.*/\1/g'

但是,它不再适用于同一字符串中的多个匹配(它只打印最后一个匹配)。我的分隔符始终为开头“-/”,结尾为“UUUUUUUUUUUUUUU”。我不知道这两者之间有什么,但我需要提取所有内容

有人知道如何解决这个问题吗?

答案1

在 PCRE 模式下使用 GNU grep,具有环视和非贪婪匹配:

$ grep -Po '(?<=-/).*?(?=U{15})' file
interestingdata1
interestingdata2

答案2

根据您的示例,您所需要的就是这样,它将在每个 UNIX 机器上的任何 shell 中使用任何 awk:

$ awk -F'([^/]+-|U{15})/' '{for (i=2; i<NF; i+=2) print $i}' file
interestingdata1
interestingdata2

相关内容