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

Rob*_*ert 2 unix bash grep

$ file myImage.png
Run Code Online (Sandbox Code Playgroud)

产生这个结果:

myImage.png: PNG image data, 42 x 64, 8-bit grayscale, non-interlaced
Run Code Online (Sandbox Code Playgroud)

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

MY_WIDTH  = file myImage.png | grep ???x
MY_HEIGHT = file myImage.png | grep x???
Run Code Online (Sandbox Code Playgroud)

che*_*ner 5

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

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

  • 很好的答案.奖励+1用于将正则表达式放在变量中.Bash改变了它的正则表达方式[在3.1和3.2之间](http://stackoverflow.com/questions/218156/bash-regex-with-quotes),因此将它们存储在变量中可以获得最大的兼容性. (2认同)