我正在尝试在非常大的图像路径上运行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?)的任何建议?
提前感谢您的帮助。
答案 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