如何用gsar/sed命令行替换指定词为十六进制值且跳过引号内内容
命令行实现引号外文本十六进制替换方案
优先方案:gsar.exe 实现
gsar原生支持分隔符区间跳过、大小写不敏感匹配、十六进制替换,不需要复杂正则,单命令即可满足需求:
gsar.exe -i -x -sAAAA -rA5 -d0x22 -o target.txt
参数说明:
-i:开启大小写不敏感匹配,自动覆盖AAAA/Aaaa/AaAa等所有大小写变体-x:启用十六进制解析模式,替换值按十六进制编码处理-sAAAA:指定要匹配的目标关键词-rA5:指定替换值为十六进制0xA5,对应示例中的XXXX-d0x22:将ASCII 0x22(双引号)设为区间分隔符,自动跳过成对分隔符包裹区间内的所有匹配项,正好满足引号内不替换的要求-o:直接将修改写回原文件,如需输出到新文件,改为-o output.txt即可
备选方案:Windows 版 GNU sed 实现
如果没有gsar,也可以用Windows平台移植的GNU sed实现,通过正则优先捕获引号内内容并保留,再替换外部匹配项:
sed -i -E "s/(\"[^\"]*\")|[aA]{4}/\1\xA5/gI" target.txt
参数说明:
-i:直接修改原文件-E:启用扩展正则- 正则逻辑:优先匹配所有双引号包裹的内容并捕获到分组1,替换时用
\1原封不动放回;对引号外的连续4个a/A字符(即任意大小写的AAAA),替换为十六进制0xA5 gI:全局匹配+大小写不敏感匹配
效果验证
使用提供的测试样例验证,两种方案的输出均符合预期:
原文本:
9023 AAAA "this is a AAAA" "AAAA" "*:;AAAA'" Aaaa " Because AAAA" " aaaa " AaAa
输出结果:9023 [0xA5] "this is a AAAA" "AAAA" "*:;AAAA'" [0xA5] " Because AAAA" " aaaa " [0xA5]
引号内的3处AAAA全部保留未替换,引号外的3处不同大小写的目标词全部替换为0xA5。
内容的提问来源于stack exchange,提问作者Henric
相关产品推荐
相关产品推荐

