如何用sed查找并转换文件中的二进制数表示格式
问题分析与解决方法
错误原因
- 你使用的正则
[[:digit:]]\+\b匹配范围太宽泛:它会匹配所有连续数字序列+单词边界,文件开头的00018342和0000都是数字序列,后面的空格属于单词边界,因此被错误添加了%前缀。 - 该正则没有定位到目标的二进制串
11010101b:它只匹配纯数字串,未包含末尾的字母b,导致目标串完全没被处理。 - 原命令没有处理末尾b的逻辑,自然无法删除这个后缀。
正确的原地修改命令
要精准匹配二进制数字(仅含0和1)加末尾b的模式,同时完成加%前缀和删b的操作,使用以下命令:
sed -i 's/\([01]\+\)b/%\1/g' test.txt
命令解释
\([01]\+\):捕获一个或多个连续的0/1字符(二进制数字),用括号分组后可通过\1引用该内容b:匹配目标串末尾的字母b%\1:将匹配到的[01]+b替换为%加上捕获到的二进制数字,自动去掉末尾的b-i:实现文件的原地修改(注意:BSD系统下的sed需要写成-i '')
执行后,原行:
00018342 0000 dc.b 11010101b
会被修改为:
00018342 0000 dc.b %11010101
内容的提问来源于stack exchange,提问作者Trevor Acton
相关产品推荐
相关产品推荐

