2016-06-20 30 views
-1

我无法获得正则表达式来处理formall循环中的imagemagick作为注释。ImageMagick - 使用正则表达式在for循环中注释?

这只是我想怎么写一个例子:

"${i:(\.{2}(.*)\.\w*$'\)}" 

注:

$ for i in *.jpg; do convert "$i" -fill white -undercolor '#00000060' -gravity South -pointsize 30 -annotate +0+50 "${i:(\.{2}(.*)\.\w*$'\)}" "./caption/${i%.jpg}-title.jpg" ; done; 

就是错的是部分的正则表达式做什么,我喜欢做的事。从开始和后缀中删除2个字符。

回答

0

为什么使用正则表达式。如果你只是试图删除第一个和最后2个字符,它可能,从评论

如果您对正则表达式的绝对设置更容易串

for i in *.jpg 
do 
    convert "$i" \ 
     -fill white \ 
     -undercolor '#00000060' \ 
     -gravity South \ 
     -pointsize 30 \ 
     -annotate +0+50 "${i:1:${#i}-3}" \ 
     "./caption/${i%.jpg}-title.jpg" 
done 

编辑我会建议使用,或提供扩展RegEx支持的其他实用程序。

for i in *.jpg 
do 
    TEXT=$(echo $i | sed -e 's/^..\(.*\)..$/\1/') 
    convert "$i" \ 
     -fill white \ 
     -undercolor '#00000060' \ 
     -gravity South \ 
     -pointsize 30 \ 
     -annotate +0+50 "$TEXT" \ 
     "./caption/${i%.jpg}-title.jpg" 
done 
+0

谢谢@emcconville – Kasam

+0

我是在bash中进行字符串操作的新手段。这仍然让我感到困惑。但是我对RegEx非常熟悉,你删除了你的regex解决方案。对于正常工作的正则表达式解决方案来说非常好,因为它对未来的需求非常灵活。 “$ {i:1:$ {#i} -3}”有效,但为什么不是“$ {i:1:-3}”和“$ {i:1:( - 3)}”? – Kasam

+0

正如你所知,正则表达式可以很好地处理不同长度的字符串,也可以处理不规则的字符串。 – Kasam