unix 文件实用程序:魔术语法

Posted

技术标签:

【中文标题】unix 文件实用程序:魔术语法【英文标题】:unix file utility: magic syntax 【发布时间】:2018-06-29 15:33:18 【问题描述】:

我想为file 实用程序创建一个自定义magic 文件,但我很难理解man magic 中描述的语法。

我需要测试几个地方,每个地方可以包含几个字符串。只有所有的测试都成功了,它才会打印一个文件类型。

总而言之,如果是 SQL 数据库中的字段,我想要一个类似的测试:

( byte_0 = "A" OR byte_0 = "B" OR byte_0 = "C" )
AND
( byte_1_to_3 = "DEF" OR byte_1_to_3 = "GHI" OR byte_1_to_3 = "JKL" )

或者在 Perl 正则表达式语法中:

m/^
  [ABC]
  (DEF|GHI|JKL)
/x

【问题讨论】:

【参考方案1】:

file 有自己的语法,有数百个例子。如果文档不清楚,您应该从阅读与您的预期更改接近的示例开始。这就是我对 ncurses 所做的,例如在 terminfo magic-file 中,将 Solaris xcurses 标头描述为字符串序列:

# 而不是 SVr4,Solaris "xcurses" 写入这个头文件: 0 正则表达式 \^MAX=[0-9]+,[0-9]+$ >1 正则表达式 \^BEG=[0-9]+,[0-9]+$ >2 正则表达式 \^SCROLL=[0-9]+,[0-9]+$ >3 正则表达式 \^VMIN=[0-9]+$ >4 正则表达式 \^VTIME=[0-9]+$ >5 正则表达式 \^FLAGS=0x[[:xdigit:]]+$ >6 正则表达式 \^FG=[0-9],[0-9]+$ >7 正则表达式 \^BG=[0-9]+,[0-9]+,Solaris xcurses 屏幕图像 #

但是没有通过阅读这个例子获得的洞察力,

0 字符串 \032\001 # 终端名称列表的第 5 个字符,但不是 Targa 图像像素大小 (15 16 24 32) >16 字节 >32 # 名称列表,如果超过 1 则用“|”分隔像“st|stterm| simpleterm 0.4.1” >>12 正则表达式 \^[a-zA-Z0-9][a-zA-Z0-9.][^|]* 编译的 terminfo 条目“%-s”

手册页不够清晰(正如您所报告的),file 按顺序处理一系列编号的步骤。

【讨论】:

以上是关于unix 文件实用程序:魔术语法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 unix 实用程序 (sed/tr/awk) 用非转义等效项替换所有转义序列

用于替换某些字符的unix实用程序[重复]

sh shell脚本函数和unix实用程序

sh shell脚本函数和unix实用程序

一套有用的 Unix 实用程序 | Linux 中国

是否有 Unix 实用程序可以将时间戳添加到标准输入?