如何使用awk从二进制文件中提取版本号

发布于 2024-11-01 11:15:58 字数 119 浏览 1 评论 0原文

我曾尝试从二进制文件中提取版本号。
版本号位于该字符串“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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

伪装你 2024-11-08 11:15:58

你真的需要使用 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.

情绪 2024-11-08 11:15:58

您可以使用 strings 命令查找对象或其他二进制文件中的可打印字符串

strings /path/to/binary | grep -o 'VeRsIoN_StRiNg.' | grep -o '.

You can use strings command to find the printable strings in a object, or other binary, file

strings /path/to/binary | grep -o 'VeRsIoN_StRiNg.' | grep -o '.

乖乖哒 2024-11-08 11:15:58

为什么不使用 awk 呢?

gawk -b/mawk/mawk2 'BEGIN { RS = "^$"; FS = "^.*VeRsIoN_StRiNg" 

    } END { print substr($2,1,1)' # mawk/mawk2 or gawk in byte mode. 
                                  # LC_ALL=C gawk -e will be here too

即使在 gawk unicode 模式下,此解决方法也可以

gawk -e 'BEGIN { RS = "^$"; FS = "^.*VeRsIoN_StRiNg" 

    } END { printf("%.1s\n", $2) }' # gawk in unicode mode

这是为了利用 %s 指定的“精度”N(例如 %.ns)意味着

最多打印 N 个项目

但是因为, FS 的定义,我们知道 $2 的第一个字节已经是你的版本号,一个单字符整数,那么这个 printf 将绕过任何 gawk抱怨尝试对 UTF8 不兼容数据执行子字符串的错误消息。

why not awk ?

gawk -b/mawk/mawk2 'BEGIN { RS = "^
quot;; FS = "^.*VeRsIoN_StRiNg" 

    } END { print substr($2,1,1)' # mawk/mawk2 or gawk in byte mode. 
                                  # LC_ALL=C gawk -e will be here too

even in gawk unicode mode, this workaround will do

gawk -e 'BEGIN { RS = "^
quot;; FS = "^.*VeRsIoN_StRiNg" 

    } END { printf("%.1s\n", $2) }' # gawk in unicode mode

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文