我曾试图从二进制文件中提取版本号
版本号在此字符串'VeRsIoN_StRiNg'之后。
但是如何使用awk找到它并打印我无法找到的下一个字符。
有人可以帮忙吗?
/拉塞
答案 0 :(得分:1)
你是否真的需要使用awk?对于grep --binary-files=text -o 'VeRsIoN_StRiNg.' file | grep -o '.$'
来说,这似乎是一个更好的用例。
我不完全确定像awk这样的流编辑器实际上如何使用二进制文件。如果这是更大的awk脚本的一部分,你可能想从awk调用上面的grep公式。
答案 1 :(得分:1)
您可以使用 strings 命令在对象或其他二进制文件中查找可打印的字符串
strings /path/to/binary | grep -o 'VeRsIoN_StRiNg.' | grep -o '.$'
答案 2 :(得分:0)
为什么不用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 将绕过任何抱怨试图在 UTF8 不合规数据上执行子字符串的 gawk 错误消息。