如何使用sed正则移除图片路径中的_ipx/xxx/片段?
解决sed替换图片路径中_ipx片段无效的问题
问题根源
你用的正则/_ipx\/.+?\//gi在regex测试工具中生效,但在sed里没有效果,核心原因是:
- sed默认使用基础正则表达式(BRE),不支持
+?这类非贪婪匹配语法 - 另外,你需要匹配的
/_ipx/xxx/前缀,用[^\/]+(匹配非斜杠字符)比非贪婪匹配更精准高效
可行解决方案
根据你使用的sed版本(GNU/Linux vs macOS/BSD),选择对应命令:
1. GNU sed(Linux环境)
启用扩展正则(-E参数),使用精准匹配的正则:
sed -i -E 's/\/_ipx\/[^\/]+\//\//g' index.html
2. macOS/BSD sed
macOS的sed需要在-i后加空字符串,同时启用扩展正则:
sed -i '' -E 's/\/_ipx\/[^\/]+\//\//g' index.html
正则说明
\/_ipx\/:精准匹配路径中的/_ipx/部分,斜杠需转义避免和sed的分隔符冲突[^\/]+:匹配任意数量(至少1个)的非斜杠字符,正好对应w_253,f_webp,q_80这类参数片段\/:匹配参数片段后的斜杠(即/images前的那个斜杠)- 替换为
\/:保留单个斜杠,最终得到/images/img.webp这类干净路径
效果验证
运行命令后,原img标签的src和srcset会被替换为:
<img src="/images/img.webp" alt="Testing a Custom Component" sizes="(max-width: 640px) 100vw, 33vw" srcset="/images/img.webp 640w, /images/img.webp 253w" />
内容的提问来源于stack exchange,提问作者Matty
相关产品推荐
相关产品推荐

