【问题标题】:unix file utility: magic syntaxunix 文件实用程序:魔术语法
【发布时间】: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

【问题讨论】:

    标签: file unix mime


    【解决方案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 按顺序处理一系列编号的步骤。

    【讨论】:

      猜你喜欢
      • 2015-10-08
      • 2019-03-29
      • 2015-05-27
      • 2012-02-27
      • 1970-01-01
      • 2015-08-08
      • 2014-10-28
      • 2011-09-25
      • 1970-01-01
      相关资源
      最近更新 更多