【发布时间】:2018-06-18 07:48:16
【问题描述】:
我有一个 ImageMagick 命令的输出来计算图像直方图的前几个条目,即:
416327: ( 61, 65, 39) #3D4127 srgb(61,65,39)
212997: (130,127, 83) #827F53 srgb(130,127,83)
428312: (167,161, 99) #A7A163 srgb(167,161,99)
481351: (198,187,116) #C6BB74 srgb(198,187,116)
381013: (214,200,148) #D6C894 srgb(214,200,148)
它代表图像中最主要的颜色,现在我想“提取”这些颜色并将它们存储在一个结构中,这样我就可以在其余的 Go 代码中使用它们。现在我正在为如何做到这一点而苦苦挣扎?
首先,我虽然关于使用fmt.Sscanf,但我只想提取两个字段,第一个和#XXXXXX。你能指出我正确的方向吗?
例如,第一行应该导致
416327 #3D4127
【问题讨论】:
-
请展示您当前的尝试,并描述您遇到的问题。
-
^(\d{6})[^#]*(#[A-F0-9]{6}).*$... 然后使用第一个和第二个捕获组。 -
在 Imagemagick 中,将输出通过管道传输到 sed,您可以这样做:
convert image -format "%c" histogram:info: | while read line; do echo $line | sed -n 's/^\(.*\):.*\(#.*\) .*$/\1 \2\n/p'; done由于这是暂停,我无法通过示例给出正确答案。 -
这个问题对我来说似乎很简单。它有两个部分。首先是如何从数据列表中提取这两个字段。我已经在上面回答了。第二个是将结果放入某种结构中。我无法回答,因为我不知道是什么样的结构。将其放入数组很容易。
array=$(convert image -format "%c" histogram:info: | while read line; do echo $line | sed -n 's/^\(.*\):.*\(#.*\) .*$/\1 \2\n/p'; done)但这可能不是 OP 想要的。