我在解析一些数据时遇到问题。
我的文件如下:
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