如何编写正则匹配空白分隔符且排除[]、双引号内部的空白字符
问题原因
你之前使用的正则仅将双引号包裹的内容纳入了保护范围,未匹配方括号[]包裹的完整内容,因此会拆分方括号内部的空格。
调整后的正则
调整捕获组的分支规则,把方括号块也加入保护范围即可,正则如下:(\[[^\]]*\]|"[^"]*"|\S+)\s+
对应sed命令
使用带扩展正则支持的sed命令实现替换,同时处理行尾可能多出的逗号:
sed -E 's/(\[[^\]]*\]|"[^"]*"|\S+)\s+/\1,/g; s/,$//' 日志文件路径
正则说明
\[[^\]]*\]:匹配完整的方括号包裹块,从[开始到最近的]结束,内部所有字符(包括空格)会被整体捕获,不会被拆分"[^"]*":保留原有的双引号块匹配逻辑,保护双引号内部的空格\S+:匹配无包裹的连续非空白字段- 末尾的
\s+匹配字段后的空白,替换为逗号即可实现字段分隔符转换
你提供的样例日志经过上述命令处理后,即可得到你期望的结果,方括号和双引号内部的空格都会完整保留。
内容的提问来源于stack exchange,提问作者Bek
相关产品推荐
相关产品推荐

