如何使用grep将bash命令输出的一部分解析为变量?

时间:2014-01-02 15:40:51

标签: bash unix grep

$ file myImage.png

产生这个结果:

myImage.png: PNG image data, 42 x 64, 8-bit grayscale, non-interlaced

我想将宽度和高度解析为变量,如下所示:

MY_WIDTH  = file myImage.png | grep ???x
MY_HEIGHT = file myImage.png | grep x???

3 个答案:

答案 0 :(得分:5)

您可以使用正则表达式匹配的子组捕获:

regex='([0-9]+) x ([0-9]+)'
[[ $(file myImage.png) =~ $regex ]] && {
    MY_WIDTH=${BASH_REMATCH[1]}
    MY_HEIGHT=${BASH_REMATCH[2]}
}

答案 1 :(得分:4)

如果您确实对图像的分辨率感兴趣,那么file包中的实用程序比imagemagick更好。特别是identify工具:

MY_WIDTH=$(identify -format "%w" myImage.png)
MY_HEIGHT=$(identify -format "%h" myImage.png)

答案 2 :(得分:0)

我相信你需要一个正则表达式,用两边的数字检测'x'模式。

This thread may help you start正如它所说:

xrandr|grep -Po '\d+(?=\s*x.*\*.*)'

而你可以做

RES = file myImage.png ||grep -Po '\d+(?=\s*x.*\*.*)'

然后相应地修改以将两者分成变量