ImageMagick的RegEx语法在bash shell中“识别”

时间:2012-05-06 14:39:22

标签: regex grep imagemagick posix posix-ere

我正在尝试在非常大的图像路径上运行ImageMagick识别命令,其中Identify返回与模式匹配的文件的图像尺寸。我想要匹配的模式是:

/jewelclub_[a-z0-9]{1,}_(small|medium|large|zoom)\.jpg/

当我尝试执行以下两个命令时,第一个成功,第二个失败,似乎我的RegExp一定有问题:

(1): identify -format "%f %w %h %b \n" 'jewelclub_*\.jpg'
(2): identify -format "%f %w %h %b \n" 'jewelclub_[a-z0-9]{1,}_(small|medium|large|zoom)\.jpg'

有关如何将命令#2中的PCRE语法更改为兼容的RegEx风格(BRE?ERE?)的任何建议?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

你确定identify接受regexp作为文件参数吗?

这种解决方法如何,将正则表达式传递给find,然后换行到xargs

find -E . -regex "./jewelclub_[a-z0-9]{1,}_(small|medium|large|zoom)\.jpg" |\
xargs identify -format "%f %w %h %b \n"

答案 1 :(得分:0)

我不知道identify是如何工作的,但我可以确认您使用的正则表达式:

jewelclub_[a-z0-9]{1,}_(small|medium|large|zoom)\.jpg

是正确的ERE语法。

为了使其符合BRE标准,这很棘手,因为BRE不支持(...|...|..)语法。 如果您需要使用BRE,我会使用identify查看每个案例,然后合并结果:

jewelclub_[a-z0-9]\{1,\}_small\.jpg
jewelclub_[a-z0-9]\{1,\}_medium\.jpg
jewelclub_[a-z0-9]\{1,\}_large\.jpg
jewelclub_[a-z0-9]\{1,\}_zoom\.jpg

或者我会在BRE中简化事情:

jewelclub_[a-z0-9]\{1,\}_[smlz][[:alpha:]]\{3,5}\.jpg

请参阅POSIX RegEx Standard