sed - bsd sed 替换文件中的十六进制值

标签 sed hex bsd

使用 GNU Sed,我可以使用以下命令替换一些十六进制值

gsed 's/.*\xFF\xD8/\xFF\xD8/g' myfile

我使用的是 OSX,因此默认的 sed 是 BSD 版本。不幸的是,前面的命令在 BSD sed 上不起作用。

知道为什么会这样以及如何做我正在寻找的事情:删除文件中 FFD8 值之前的所有内容。

最佳答案

处理该问题的最简单方法是使用 bash'ANSI-C Quoting'机制:

sed $'s/.*\xFF\xD8/\xFF\xD8/g' myfile

请注意,\xFF\xD8 不是有效的 UTF-8,因此您可能会遇到字符问题,但基 native 制有效:

$ echo sed $'s/.*\xFF\xD8/\xFF\xD8/g' | odx
0x0000: 73 65 64 20 73 2F 2E 2A FF D8 2F FF D8 2F 67 0A   sed s/.*../../g.
0x0010:
$

odx 是一个十六进制转储程序。

关于sed - bsd sed 替换文件中的十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19171415/

相关文章:

linux - 我们如何从 DeNormalized 文本文件 one 构建 Normalized 表?

unix - 如何在 unix 上使用行号从文件中提取行?

c# - 如何将 CIDR 子网掩码转换为 HEX 格式?

bash - 从日期字符串获取纪元时间

linux - 删除部分绝对路径字符串

bash - 从 Bash 中的字符串末尾删除特定字符的序列

C - 为什么我的缓冲区打印不正确?

c - 在c中声明十六进制字符 'error: multi-character character constant'

c - 如何检查 Linux/FreeBSD 上 write() 调用被阻止的问题?