2017-06-27 19 views
0

约一些文件的utilite nconvert产品信息:正则表达式:确定从utilite输出信息使用grep

nconvert -info file.tiff 

输出

** NCONVERT v7.00 (c) 1991-2017 Pierre-E Gougelet (Apr 18 2017/09:49:26) ** 
     Version for Windows NT/9x/2000/Xp/Vista/7 (All rights reserved) 
** This is freeware software (for non-commercial use) 

Over... 

file.tiff : Success 
    Format    : TIFF 
    Name     : tiff 
    Compression   : CCITT Group 4 
    Width    : 3194 
    Height    : 5056 
    Components per pixel : 1 
    Bits per component : 1 
    Depth    : 1 
    # colors    : 2 
    Color model   : RGB 
    Bytes Per Plane  : 400 
    Orientation   : Top Left 
    Xdpi     : 600 
    Ydpi     : 600 
    Page(s)    : 30 
    Info: 
     Photometric Interpretation: White=0 
     PhotometricInterpretation: 0 
     PlanarConfiguration: 1 
     SamplesPerPixel: 1 
     Software: LIBFORMAT (c) Pierre-e Gougelet 
    Metadata    : (EXIF) 

我需要提取用grep数字信息。假设,我想定义的页数,我用

nconvert -info file.tiff | grep -oP "(?<=Page\(s\)).*$" 

我得到:

 : 30 

但我只需要数30

修改下面也没有带来预期的结果

nconvert -info efile.tiff | grep -oP "(?<=Page\(s\)\s+\:).*$" 

我怎样才能得到冒号后的信息?

回答

1

您可以使用此grep

nconvert -info efile.tiff | grep -oP 'Page\(s\)\h*:\h*\K\d+' 
30 

\K将重置匹配信息。

您还可以使用awk

nconvert -info efile.tiff | awk -F '[: \t]*' '$2=="Page(s)"{print $3}' 
30 
1

您需要积极的回顾后转换与\K比赛重新运营商这里允许值之前,你需要提取可变宽度模式:

grep -oP 'Page\(s\)\s*:\s*\K.*' 

这里,

  • Page\(s\) - 匹配Page(s)
  • \s*:\s* - 匹配:附带0+空格
  • \K - 忽略迄今
  • .*匹配的文本 - 该行的其他部分相匹配。
1
nconvert -info file.tiff | 
sed -n '/^[[:space:]]*Page\(s\)/{s/^[^[:digit:]]*//;p}' 

应该这样做。 __

说明

  • sed-n限制了它在打印每行到输出。默认情况下,它会打印一切
  • /pattern/是不言自明的,也就是说寻找一个模式,用两个正斜杠包围它。
  • /^pattern/会在线路
  • /^[[:space:]]*Page\(s\)/寻找一条线,然后Page(s)
  • 如果我们发现了线以上部分的开头任意数量的空格的开始的模式,然后sed处理在花括号内的命令{commands}
  • 第一个命令是替代格式为s/patten/substitution/
  • 在正则表达式
  • []用于字符范围,例如[A-Z][0-9]
  • 但字符类也可与[:digit:]字符类是一样的0-9通过把一个^[]你否定的开始特定的人物类。所以简而言之,s/^[^[:digit:]]*//表示在开始时删除任何非数字字符。备注*表示任何zero or more次。
  • p最后打印行。也不是sp命令之间用分号隔开
+0

请问您能否给我介绍一下''...''之间的什么意思? – Sergio

+0

@Sergio:我已经提出了一些解释:) – sjsam