sed 查找和转换二进制数字表示

问题描述 投票:0回答:1

我有一个包含二进制数字的文件,我想用 sed -i 内联更改它。

该文件有这样的行:

  00018342 0000           dc.b   11010101b

所以我希望它以这种方式表示:

  00018342 0000           dc.b   %11010101

我试过这个:

sed -e 's/[[:digit:]]\+\b/%&/g' test.txt

我认为只有在发现实际数字前面有“b”时才会在前面加上“%”。但它输出的是这样的:

  %00018342 %0000           dc.b    11010101b

你知道我做错了什么吗?那么如何在添加“%”之后删除“b”呢?

sed binary transform inline representation
1个回答
0
投票

你可以使用

sed 's/\b\([01]\+\)b\b/%\1/g' file

查看在线 sed 演示

#!/bin/bash
s='  00018342 0000           dc.b   11010101b'
sed 's/\b\([01]\+\)b\b/%\1/g' <<< "$s"
# =>   00018342 0000           dc.b   %11010101

详情

  • \b
    - 单词边界
  • \([01]\+\)
    - 第 1 组:一个或多个
    1
    0
    数字
  • b
    -
    b
    字母
  • \b
    - 单词边界
  • %\1
    - 替换为
    %
    字符 + 第 1 组值。

POSIX ERE 版本是

sed -E 's/\b([01]+)b\b/%\1/g' file

© www.soinside.com 2019 - 2024. All rights reserved.