我有一个包含二进制数字的文件,我想用 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 '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
。