Linux

在單個字元串中的兩個模式之間搜尋多個結果

  • November 20, 2019

我在解析一些數據時遇到問題。

我的文件如下:

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

我需要得到:

interestingdata1
interestingdata2

當我只有一個這樣的“有趣數據”時:

bliblablo-/interestingdata1UUUUUUUUUUUUUUU/-bl

以下命令對我有用:

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

但是,它不再適用於同一字元串中的多個匹配(它只列印最後一個匹配)。我的分隔符總是“-/”作為開頭,“UUUUUUUUUUUUUUU”作為結尾。我不知道這兩者之間是什麼,但我需要提取所有內容

有誰知道如何解決這個問題?

在 PCRE 模式下使用 GNU grep,具有環視和非貪婪匹配:

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

根據您的範例,您只需要在每個 UNIX 機器上的任何 shell 中使用任何 awk 即可工作:

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

引用自:https://unix.stackexchange.com/questions/553178