我正在尝试使用正则表达式从 格式化一些二进制文件xxd -b
,但为了简单地演示这一点,我将向您展示我期望发生的事情:
要删除的正则表达式:/1x|1.*/
文本:1x21y3333333313333
->2
如果所有出现的1x
都被删除,那么从第一个 1 开始出现的所有内容都应该被删除。发生了什么应该立即显而易见,但如果不是,请使用 this。关键是如果1x
匹配,则应该中止模式的其余部分。
这是echo "AA" | xxd -b
(的绑定转储AA\n
)的输出:
0000000: 01000001 01000001 00001010 AA.
我的目标是 1. 删除每个字节的第一个 0(ascii = 7 位)和 2. 删除字符串的其余部分,以便只保留实际的二进制文件。所以我把它输入sed 's/ 0//g'
:
0000000:100000110000010001010 AA.
添加第二步,sed -E 's/ 0| .*//g'
:
0000000:
显然,我希望得到:
0000000:100000110000010001010
我尝试过但没有完成工作的事情:
xxd
可以-g0
合并列,但它保留每个字节中的第一个零(每个字符占用一个字节,而不是 7 位)-r
与此同时,我将使用 perl,但这种行为让我感到困惑,也许这里有一个原因(教训)?