如何在Bash中用单个正则表达式替换日志敏感头信息
用Bash正则替换敏感请求头值为***
需求
给定iOS应用的网络请求日志片段,需通过单个Bash正则表达式匹配名称包含secret或authorization(大小写不敏感)的请求头,将其对应值替换为***,以实现日志的安全分享。
原日志内容
Http: createRide (422): http(serviceResponse: POST https://staging.test.com/sometpath { ["Authorization": "Bearer xxxxxxxxxx", "X-REQUEST-ID": "5FE8D9C0-B3F0-4DAE-9188-A0CB1906EB5D", "X-Client-Version": "3.0.0", "X-Client-Identifier": "something", "Content-Type": "application/json", "X-Api-Version": "1", "X-Client-Secret": "xxxxxxxxx"] } { "data" : { }
期望替换结果
Http: createRide (422): http(serviceResponse: POST https://staging.test.com/sometpath { ["Authorization": "***", "X-REQUEST-ID": "5FE8D9C0-B3F0-4DAE-9188-A0CB1906EB5D", "X-Client-Version": "3.0.0", "X-Client-Identifier": "something", "Content-Type": "application/json", "X-Api-Version": "1", "X-Client-Secret": "***"] } { "data" : { }
解决方案
使用sed命令完成替换,命令如下:
sed -E -i.bak 's/("[^"]*((secret|authorization)[^"]*)": ")[^"]*"/\1***"/gi' your-log-file.txt
命令说明
-E:启用扩展正则表达式,简化语法-i.bak:原地修改日志文件,并生成后缀为.bak的原文件备份(若不需要备份,可改为-i)/gi:g表示全局匹配替换,i表示忽略大小写- 正则逻辑:
- 匹配请求头的名称部分(包含
secret或authorization,大小写不敏感)及后续的: " - 匹配头值部分(双引号内的任意内容)
- 将头值替换为
***,保留原头名格式
- 匹配请求头的名称部分(包含
内容的提问来源于stack exchange,提问作者blackjacx
相关产品推荐
相关产品推荐

