Linux
在單個字元串中的兩個模式之間搜尋多個結果
我在解析一些數據時遇到問題。
我的文件如下:
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