从以下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/