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

如何用正则折叠mkfs输出中的退格符与空格序列?

解决mkfs交互式输出日志混乱的正则表达式方案

保存mkfs命令输出到日志文件时,会遇到日志内容混乱的问题——该命令采用交互式进度展示:先打印退格符回退光标,再用空格擦除旧内容,接着再次退格并输出新进度信息,导致日志里充斥无效的控制字符。

目前已实现将连续退格符折叠为单个字符,但需要更优的正则表达式,把「退格符+空格+退格符」这类序列转换为单个空格。

示例输入与期望输出

示例输入

# echo -e "123\x08\x08\x08   \x08\x08\x08456    789"

期望转换结果

123 456    789

mkfs实际输出示例(退格符复制粘贴时已移除)

mke2fs 1.47.0 (5-Feb-2023)
fs_types for mke2fs.conf resolution: 'ext4'
Discarding device blocks:       0/16463361572864/1646336               done                            
Filesystem label=data_volume
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
412080 inodes, 1646336 blocks
82316 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1686110208
51 block groups
32768 blocks per group, 32768 fragments per group
8080 inodes per group
Filesystem UUID: c27f71c7-2d9e-4a33-9d54-449ab3e2f378
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables:  0/51     done                            
Writing inode tables:  0/51     done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information:  0/51     done

正则表达式解决方案

分步处理正则

  1. 先合并连续退格符:将多个连续的\x08(退格符)替换为单个退格符
    s/\x08+/\x08/g
    
  2. 再替换「退格+空格+退格」序列:将这类组合替换为单个空格
    s/\x08 \x08/ /g
    

一次性处理复杂组合的正则

如果要覆盖多个退格+多个空格+多个退格的场景,可以用更通用的正则:

s/\x08+\s+\x08+/ /g

实际使用示例(以sed为例)

直接通过sed实时处理mkfs输出并写入日志:

mkfs.ext4 /dev/sdX 2>&1 | sed -e 's/\x08+/\x08/g' -e 's/\x08 \x08/ /g' > mkfs.log

或者用组合正则简化命令:

mkfs.ext4 /dev/sdX 2>&1 | sed -e 's/\x08+\s+\x08+/ /g' > mkfs.log

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:50:01