RegEx 排除集,同时将所有字符 2 x 2 分组
RegEx exclude sets while grouping all characters 2 by 2
我想修改一个带有模式的二进制文件。我已经使用 xxd
(来自包 vim)将文件转换为普通的 hexdump。普通文件看起来像这样(只有 1 行,没有尾随 LF):
$ xxd -ps file.bin | tr -d '\n' | tee out.txt
3a0a5354...
我想删除 原始文件 中匹配 \x01[^\xFF]*\xFF
的所有模式(一个开始标记和一个结束标记以及它们之间的所有内容,另一个结束标记除外),但是 sed
不是这样工作的。
示例输入和所需的匹配项:
020202020101010101feeffeefff0000...
~~~~~~~~~~~~~~~~~~~~
我正在考虑这样做:
sed 's/regex//g' in.file > out.file
现在我正在尝试匹配所有字符 2×2,同时排除 ff
。有什么想法吗?
这应该可以解决问题:
((..)|01([0-9a-e][0-9a-f]|[0-9a-f][0-9a-e])*ff)*
也就是说,我们匹配成对的十六进制数字,其中第一个或第二个数字可以是 f,但不能都是。在周围环境中,我们还必须一次匹配所有两个字符,以确保我们的匹配从偶数开始。
显然,您必须添加一些内容,以实际从输出中删除内部组,这特定于您的正则表达式引擎。我发帖后才意识到简单的 s/ 是行不通的。
我想修改一个带有模式的二进制文件。我已经使用 xxd
(来自包 vim)将文件转换为普通的 hexdump。普通文件看起来像这样(只有 1 行,没有尾随 LF):
$ xxd -ps file.bin | tr -d '\n' | tee out.txt
3a0a5354...
我想删除 原始文件 中匹配 \x01[^\xFF]*\xFF
的所有模式(一个开始标记和一个结束标记以及它们之间的所有内容,另一个结束标记除外),但是 sed
不是这样工作的。
示例输入和所需的匹配项:
020202020101010101feeffeefff0000...
~~~~~~~~~~~~~~~~~~~~
我正在考虑这样做:
sed 's/regex//g' in.file > out.file
现在我正在尝试匹配所有字符 2×2,同时排除 ff
。有什么想法吗?
这应该可以解决问题:
((..)|01([0-9a-e][0-9a-f]|[0-9a-f][0-9a-e])*ff)*
也就是说,我们匹配成对的十六进制数字,其中第一个或第二个数字可以是 f,但不能都是。在周围环境中,我们还必须一次匹配所有两个字符,以确保我们的匹配从偶数开始。
显然,您必须添加一些内容,以实际从输出中删除内部组,这特定于您的正则表达式引擎。我发帖后才意识到简单的 s/ 是行不通的。