在PowerShell中使用sed替换含特殊字符的JSON字符串失败,求助
解决sed替换带特殊字符的JSON字符串问题
问题分析
你要替换的目标字符串包含多个正则元字符([、(、)、])和引号,之前的命令要么匹配模式错误(多余单引号),要么转义混乱,导致无法匹配目标内容。
正确的sed命令
使用|作为替换分隔符(避免和目标字符串中的字符冲突),同时正确转义所有正则元字符:
针对第一个文件的命令
sed -i "s|\"\\[parameters\\('test-test_properties_typeProperties'\\)\\]\"|{}|g" $(Build.Repository.LocalPath)/ARMTemplate/ARMTemplateParametersForFactory.json
针对第二个文件的命令
sed -i "s|\"\\[parameters\\('test-test_properties_typeProperties'\\)\\]\"|{}|g" $(Build.Repository.LocalPath)/ARMTemplate/ARMTemplateForFactory.json
命令说明
- 用
|替换默认的/作为分隔符,减少转义操作的复杂度 - 对正则元字符进行转义:
[→\[,(→\(,)→\),]→\] - 目标字符串中的双引号在双引号包裹的sed命令里需转义为
\" -i参数用于直接修改文件内容(Linux环境下无需额外参数,若为macOS需改为-i '')
之前命令失败的原因
- 第一个命令的匹配模式多了首尾的单引号(
'"... "'),但目标字符串是双引号直接包裹的,无多余单引号,导致匹配失败 - 第二个命令转义逻辑混乱,错误添加了多余单引号,完全偏离目标字符串的结构,无法匹配到内容
内容的提问来源于stack exchange,提问作者Joy
相关产品推荐
相关产品推荐

