使用SED正则表达式替换JSON值时遇无效前置正则表达式错误
sed替换JSON值正则报错的解决方法
错误根源
你使用的(?<="applicationUrl": ")是PCRE专属的正向回溯断言,但sed的POSIX扩展正则(-E参数)不支持这类断言语法,这就是触发sed: -e expression #1, char 60: Invalid preceding regular expression错误的原因。
正确的sed命令写法
不用断言,改用捕获组匹配并保留固定前缀,仅替换目标值部分:
基础写法(斜杠分隔)
sed -E 's/("applicationUrl": ")[^"]+/\1http:\/\/0.0.0.0:80/' input.json
更简洁的写法(哈希分隔,无需转义斜杠)
sed -E 's#("applicationUrl": ")[^"]+#\1http://0.0.0.0:80#' input.json
命令解释
("applicationUrl": "):将"applicationUrl": "捕获为分组1,替换时用\1引用该内容[^"]+:匹配原URL的所有非双引号字符(即要替换的旧值)- 替换段
\1http://0.0.0.0:80:保留前缀,拼接新URL
最终效果
执行后JSON会更新为:
{ "profiles":{ "http":{ "applicationUrl":"http://0.0.0.0:80" } } }
进阶建议
如果频繁处理JSON,优先用专门的JSON工具jq,比sed正则更可靠,避免JSON格式变化导致的匹配失败:
jq '.profiles.http.applicationUrl = "http://0.0.0.0:80"' input.json
内容的提问来源于stack exchange,提问作者Luis Carlos Aveiro
相关产品推荐
相关产品推荐

