【发布时间】:2021-10-07 03:17:36
【问题描述】:
我想从地址字符串中提取端口号。整个字符串如下所示:
connect single-cluster --listen-addr=127.0.0.1:12345 --filename=hello
或
connect single-cluster --listen-addr=127.0.0.1 --filename=hello
我想将listen-addr 中的地址和端口保存到两个变量:ADDR 和PORT。如果输入字符串中不存在端口,只需将PORT变量留空,并设置ADDR即可。
现在如果输入字符串中存在端口号,我可以使用这个正则表达式:
ORI_STR="connect single-cluster --listen-addr=127.0.0.1:12345 --filename=hello"
LISTEN_ADDR_REGEX="(^|[[:space:]])--listen-addr=(([^[:space:]]+):([^[:space:]]+))($|[[:space:]])"
[[ $ORI_STR =~ $LISTEN_ADDR_REGEX ]] && ADDR=${BASH_REMATCH[3]} && PORT=${BASH_REMATCH[4]}
echo "ADDR=$ADDR"
echo "PORT=$PORT"
这给了我:
ADDR=127.0.0.1
PORT=12345
但是我不知道如何在原始字符串中包含端口号未设置的情况。 (即ORI_STR 中没有:12345)。
【问题讨论】: