如何使用grep
或任何其他工具获取输出中的特定值
在下面的输出中我需要获取255.00
以下行中的值Minimum: 255.00 (1.0000)
类似这样的模式:Channel Statistics:\s+Gray:\s+Minimum: +([\d.]+)
Image: test.tif
Format: TIFF (Tagged Image File Format)
Geometry: 2525x1785
Class: DirectClass
Type: bilevel
Depth: 1 bits-per-pixel component
Channel Depths:
Gray: 1 bits
Channel Statistics:
Gray:
Minimum: 255.00 (1.0000)
Maximum: 255.00 (1.0000)
Mean: 255.00 (1.0000)
Standard Deviation: 0.00 (0.0000)
Filesize: 581
Interlace: No
Orientation: Unknown
Background Color: white
Border Color: #DFDFDF
Matte Color: #BDBDBD
答案1
minimum:
使用 perl,您可以执行以下操作。它捕获块内部的数值Channel Statistics:
并打印它:
perl -0 -ne '/Channel Statistics:\s+Gray:\s+Minimum:\h+([\d.]+)/ && print $1,"\n"' file
输出:(例如)
255.00
解释:
-0 # specifies the input record separator. If there are no digits, the null character is the separator. The whole file is read in a single string.
-n # Iterate over the file
-e # execute the command line
正则表达式:
/ # regex delimiter
Channel Statistics: # literally
\s+ # 1 or more any kind of spaces
Gray: # literally
\s+ # 1 or more any kind of spaces
Minimum: # literally
\h+ # 1 or more horizontal spaces
( # start group 1
[\d.]+ # 1 or more digit or dot
) # end group
/ # regex delimiter
答案2
和sed
sed -rn 's/^\s+Minimum:\s+([0-9.]+).+$/\1/p' image.data
慢动作:
-r
告诉sed
我们使用扩展的正则表达式“语法”-n
告诉sed
不要打印不匹配的行s/^\s+Minimum:\s+([0-9.]+).+$/\1/
匹配你的目标行,并用你想要的值替换它p
告诉sed
打印结果
如果您需要通过考虑前几行的内容来消除歧义,那就稍微复杂一些:
sed -r ':a;N;$!ba; s/^.*Gray:\s*\n\s+Minimum:\s+([0-9.]+).+$/\1/' image.data
在哪里:
:a;N;$!ba;
是语言中的一个循环sed
,用于一次性加载整个文件-n
不再需要,因为没有我们不想打印的其他行- 因为我们
p
不使用-n
答案3
这非常简单,假设字符串“Minimum:”在您的输入中恰好出现一次:
awk '/Minimum:/ {print $2}'