如何使用awk从二进制文件中提取版本号
我曾尝试从二进制文件中提取版本号。
版本号位于该字符串“VeRsIoN_StRiNg”之后。
但是如何使用 awk 找到它并打印下一个字符我不知道。
有人可以帮忙吗?
/拉塞
I had tried to extract version number from a binary file.
The version number is after this string 'VeRsIoN_StRiNg'.
But how to find it using awk and print the next character I can't find out.
Someone ther can help?
/Lasse
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你真的需要使用 awk 吗?这似乎是 grep --binary-files=text -o 'VeRsIoN_StRiNg' 的更好用例。文件| grep -o '.$'.
我不完全确定像 awk 这样的流编辑器在处理二进制文件时实际效果如何。如果这是较大 awk 脚本的一部分,您可能想从 awk 调用上面的 grep 公式。
Do you strictly need to use awk? This seems like a better usecase for
grep --binary-files=text -o 'VeRsIoN_StRiNg.' file | grep -o '.$'
.I'm not entirely sure how well a stream editor like awk will actually work with a binary file. If this is part of a larger awk script, you probably want to call the above grep formula from awk.
您可以使用 strings 命令查找对象或其他二进制文件中的可打印字符串
You can use strings command to find the printable strings in a object, or other binary, file
为什么不使用 awk 呢?
即使在 gawk unicode 模式下,此解决方法也可以
这是为了利用 %s 指定的“精度”N(例如 %.ns)意味着
最多打印 N 个项目
但是因为,
FS
的定义,我们知道$2
的第一个字节已经是你的版本号,一个单字符整数,那么这个 printf 将绕过任何 gawk抱怨尝试对 UTF8 不兼容数据执行子字符串的错误消息。why not awk ?
even in gawk unicode mode, this workaround will do
This is to take advantage of the fact a "precision" N specified (e.g. %.ns) for %s means
at most N items printed
But since, by definition of
FS
, we know the first byte of$2
is already your version number, a single character integer, then this printf will circumvent any gawk error message of complaining trying to do sub-strings on UTF8 non-compliant data.