You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用单行sed命令移除控制字符、空行并合并每两行

单行GNU sed命令处理日志:移除控制字符、空行并合并行

需求

处理test.log文件,完成以下操作:

  • 移除行尾的^M(回车符)控制字符
  • 删除所有空行
  • 将每两行合并为一行
  • 替换-为0,移除数字后的MB后缀

原始日志内容 (test.log)

d62150:fxn3008_d62150 - ^M
809MB 668MB 271MB

d62150:fxn4008_d62150 6227MB ^M

9465MB 9778MB 0MB

分步实现(管道组合)

之前通过多个sed命令管道完成了需求:

sed -r 's/\r//g;s/-/0/g;s/([0-9]+)MB/\1/g' test.log | sed '/^$/d' | sed "N;s/\n/ /"

输出结果

d62150:fxn3008_d62150 0   809 668 271
d62150:fxn4008_d62150 6227   9465 9778 0

整合为单行sed命令

利用GNU sed的标签循环和多命令支持,将所有逻辑合并为单个命令:

sed -r ':loop; /^\r?$/d; s/\r//g; s/-/0/g; s/([0-9]+)MB/\1/g; N; s/\n/ /; b loop' test.log

命令解析

  • :loop:定义循环标签,用于后续跳转循环
  • /^\r?$/d:匹配空行或仅含回车符的行并直接删除
  • s/\r//g:全局移除所有回车符(即^M控制字符)
  • s/-/0/g:全局将-替换为0
  • s/([0-9]+)MB/\1/g:捕获数字部分,移除后续的MB后缀
  • N:读取下一行到当前模式空间,为两行合并做准备
  • s/\n/ /:将两行之间的换行符替换为空格,完成合并
  • b loop:跳转到loop标签,继续处理剩余行内容

环境说明

使用版本:sed (GNU sed) 4.2.2

内容的提问来源于stack exchange,提问作者micron cloud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:24:23