gpt4 book ai didi

regex - 如何从 Bash 中的正则表达式中提取多个环境变量?

转载 作者:太空宇宙 更新时间:2023-11-04 09:24:54 27 4
gpt4 key购买 nike

我基本上想将 URL 中的部分提取到不同的环境变量中以备后用,因此我希望能够执行如下操作:

echo "my-app.domain.com:8080" | \
sed -r 's/((\w+)\.)?(\w+\.\w+)(\:(\d+))?/\2\n\3\n\5/g' | \
read SUBDOMAIN DOMAIN PORT

但是这似乎不起作用(出于某种原因,来自端口的“:”总是在“\5”中输出):

sh-4.2# echo "my-app.domain.com:8080" | \
sed -r 's/((\w+)\.)?(\w+\.\w+)(\:(\d+))?/\2\n\3\n\5/g'
my-app
domain.com
:8080

更让我感到奇怪的是,如果我在\5 之后打印一个新行,这将是输出:

sh-4.2# echo "my-app.domain.com:8080" | sed -r 's/((\w+)\.)?(\w+\.\w+)(\:(\d+))?/\2\n\3\n\5\n/g'
my-app
domain.com

:8080

无论如何,当使用 read 时,也没有设置任何变量...似乎我做错了很多事情,但无法准确地发现是什么。

最佳答案

使用 GNU bash:

url="my-app.domain.com:8080"
[[ $url =~ ([^.]*)\.(.*):(.*) ]]
subdomain="${BASH_REMATCH[1]}"
domain="${BASH_REMATCH[2]}"
port="${BASH_REMATCH[3]}"
echo "$subdomain $domain $port"

输出:

my-app domain.com 8080

参见:The Stack Overflow Regular Expressions FAQ

关于regex - 如何从 Bash 中的正则表达式中提取多个环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37554473/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com