utilite nconvert生成有关某个文件的信息:
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+\:).*$"
如何在冒号后获取信息?
答案 0 :(得分: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 :(得分:1)
您需要在此处使用\K
匹配重置运算符转换正向lookbehind,以在您需要提取的值之前允许可变宽度模式:
grep -oP 'Page\(s\)\s*:\s*\K.*'
在这里,
Page\(s\)
- 匹配Page(s)
\s*:\s*
- 匹配用0 +空格包围的:
\K
- 省略了目前为止匹配的文字.*
- 匹配其余部分。答案 2 :(得分:1)
nconvert -info file.tiff |
sed -n '/^[[:space:]]*Page\(s\)/{s/^[^[:digit:]]*//;p}'
应该这样做。 __
<强>解释强>
-n
sed
限制它将每一行打印到输出。默认情况下,它会打印所有内容。
/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
打印线条。此外,s
和p
命令也不以分号分隔