bash regexp提取URL的一部分
从以下URL:bash regexp提取URL的一部分,regex,bash,sed,Regex,Bash,Sed,从以下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\u 15:23:07.566833\u MPoy/ 我的正则表达式很差。我提出了以下建议,但不起作用: sed -n
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\u 15:23:07.566833\u MPoy/
我的正则表达式很差。我提出了以下建议,但不起作用:
sed -n "s/^.*browser\(test-lab.*/.*/\).*$/\1/p"
有人能帮我解决我做错了什么吗?使用不同的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/
使用不同的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/
请您也尝试一下awk解决方案,并让我知道这是否对您有帮助
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次出现在存储缓冲区的相同方法上,就像它们将查找第一次出现的/
,并将最后一个匹配字母的下一次出现的值保留到第一次出现为止
/\5/:现在我用
\5
表示第五个缓冲区,根据OP的说明包含值 请您也尝试一下awk解决方案,如果这对您有帮助,请告诉我
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次出现在存储缓冲区的相同方法上,就像它们将查找第一次出现的/
,并将最后一个匹配字母的下一次出现的值保留到第一次出现为止
/\5/:现在我用
\5
表示第五个缓冲区,根据OP的说明包含值 谢谢你helps@AnkitGupta,很高兴它帮助了你,我还补充了解释。如果您有任何疑问,请告诉我。不断学习,不断分享知识,祝你有一个愉快的一天。谢谢helps@AnkitGupta,很高兴它帮助了你,我还补充了解释。如果您有任何疑问,请告诉我。不断学习,不断分享知识,祝你度过愉快的一天。