如何使用sed删除日志中seq-cont括号块内的换行与多余空白
sed实现删除指定大括号范围内的空白字符
测试文件内容
你当前的日志文件结构如下:
test { seq-cont { 0, 67, 266 }, grp-id 505 } } test{ test1{ val } }
可通过以下命令快速生成测试文件:
echo -e "test { seq-cont { 0, 67, 266 }, grp-id 505 } } test{ test1{ val } } " > logfile
需求说明
仅删除seq-cont {到其配对闭合}之间的所有空白字符,其他区域格式完全保留,期望输出如下:
test{seq-cont{0,67,266}, grp-id 505 } } test{ test1{ val } }
正确sed命令(适配GNU sed)
sed '/seq-cont {/{ :join /}[^}]*$/!{ N; b join } s/[[:space:]\n]//g s/},/&\ / }' logfile
如果需要直接修改原文件,添加-i参数即可:
sed -i '/seq-cont {/{ :join /}[^}]*$/!{ N; b join } s/[[:space:]\n]//g s/},/&\ / }' logfile
命令逻辑
- 扫描到含
seq-cont {的行后进入处理逻辑 - 不断读取下一行合并到当前模式空间,直到匹配到
seq-cont对应的闭合} - 删除模式空间内所有空白、换行字符,完成范围内压缩
- 在
},后重新插入换行,保证后续grp-id等内容的原有缩进完全保留 - 其他未匹配到
seq-cont的行直接输出,不会改动其他代码块的格式
内容的提问来源于stack exchange,提问作者Ramanan T
相关产品推荐
相关产品推荐

