Bash Regexp提取一部分URL



从以下URL:

https://console.developers.google.com/storage/browser/test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/]

我需要提取以下部分:

test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/

我在Regex上很糟糕。我想出了以下内容,但它不起作用:

sed -n "s/^.*browser(test-lab.*/.*/).*$/1/p"

谁能帮助我做错了什么?

您还可以尝试使用尴尬解决方案,让我知道是否对您有帮助。

echo "https://console.developers.google.com/storage/browser/test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/" | awk '{sub(/.*browser//,"");sub(//$/,"");print}'

说明:简单地替换所有内容,直到browser/然后用null代替最后一个/

edit1:也在这里添加SED解决方案。

sed 's/(.[^//]*)//(.[^/]*)(.[^/]*)(.[^/]*)/(.*)/5/'  Input_file

输出将如下。

test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/

SED命令的说明:将整个线分为部分,并使用SED的能力将匹配的正则表达式保持在内存中,因此以下是我使用的分隔线。

(。[^//] ):*它将具有值直至https:在其中,如果有人想打印它,您可以使用1因为这是SED的第一个缓冲。

//:现在按URL //提及它们。

(。[^/] ):*现在是SED缓冲区的第二部分,它在其中具有值console.developers.google.com,因为Regex是第一次出现/并停止在那里匹配。

(。[^/] )&&(。[^/] )&&/( .):*这些接下来的3个事件以相同的方法来存储缓冲区,例如他们将首先出现/的出现,并从上次匹配的字母的下一个出现到第1个/来保留该值。

/ 5/:现在,我正在用5代替所有内容,表示第5个缓冲区,该缓冲区包含根据OP的说明包含值。

使用其他SED定界符,不要忘记逃脱牙套。

avinash:~/Desktop$ echo 'https://console.developers.google.com/storage/browser/test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/]' | sed 's~.*/browser/([^/]*/[^/]*/).*~1~'
test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/

将GREP与oP参数使用。

avinash:~/Desktop$ echo 'https://console.developers.google.com/storage/browser/test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/]' | grep -oP  '/browser/K[^/]*/[^/]*/'
test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/

最新更新