如何在Bash中提取//与.之间的子字符串?
提取URL中//与.之间的子字符串方法
需求:从URL https://hello.world.example.com 中提取//与第一个.之间的子字符串hello。
已验证有效的awk方法
你尝试的awk命令确实可以得到目标结果,它通过将/和.作为分隔符,分割后取第2个字段:
echo 'https://hello.world.example.com' | awk -F[/.] '{print $2}'
该方法对http://开头的URL同样适用,无需修改。
更精准的sed方法
用正则精准匹配//后到第一个.的内容,避免分隔符带来的意外情况:
echo 'https://hello.world.example.com' | sed -E 's/.*\/\/([^.]+)\..*/\1/'
正则逻辑:匹配任意字符直到//,捕获第一个.前的所有非.字符,最终仅保留捕获的内容。
grep方法(支持Perl正则)
借助正向预查定位//,直接提取目标内容:
echo 'https://hello.world.example.com' | grep -oP '(?<=//)[^.]+'
-o参数仅输出匹配部分,(?<=//)确保前面是//,[^.]+匹配所有非.字符直到第一个.。
内容的提问来源于stack exchange,提问作者ratzip
相关产品推荐
相关产品推荐

