如何在Shell脚本中从remoteEntry.js提取HTTP/HTTPS前缀地址?
提取remoteEntry.js中的HTTP/HTTPS地址前缀
你的原有命令无效,是因为[^_next]+是字符集否定匹配,它会排除_、n、e、x、t这五个单个字符,而非跳过"_next"整个字符串,导致匹配提前终止。以下是几种可行的Shell实现方法:
方法1:使用grep(最简方案)
直接匹配HTTP/HTTPS开头,直到第一个斜杠前的完整前缀:
grep -Eo 'https?://[^/]+' remoteEntry.js
https?://:匹配http://或https://,?表示s可选[^/]+:匹配任意非斜杠的字符序列,刚好截取到域名+端口的部分
方法2:使用sed(精确匹配到/_next前)
如果需要严格匹配到/_next之前的前缀,避免误匹配其他URL:
sed -n 's/.*\(https\?:\/\/[^\/]*\)\/_next.*/\1/p' remoteEntry.js
-n:只输出匹配的行- 正则捕获组
\(https\?:\/\/[^\/]*\):提取http(s)://到第一个斜杠前的内容 - 替换后仅输出捕获的部分
方法3:使用awk(处理多字段场景)
如果文件中有多个类似URL,awk可以更灵活地遍历字段提取:
awk -F'"' '{for(i=1;i<=NF;i++) if($i ~ /^https?:\/\//) {sub(/\/_next.*/,"",$i); print $i}}' remoteEntry.js
-F'"':以双引号作为字段分隔符- 遍历每个字段,找到以HTTP/HTTPS开头的项,再去掉
/_next及之后的内容后输出
测试效果
针对你提供的示例行:
var remotes = {"home":"http://localhost:3001/_next/static/ssr/remoteEntry.js"};
上述三种方法都会输出:
http://localhost:3001
内容的提问来源于stack exchange,提问作者kittu
相关产品推荐
相关产品推荐

