Regex ImageMagick-带有正则表达式的for循环中的注释?

Regex ImageMagick-带有正则表达式的for循环中的注释?,regex,for-loop,imagemagick,sed,Regex,For Loop,Imagemagick,Sed,我无法让正则表达式在带有正则表达式作为注释的for循环中使用imagemagick 这只是我想写的一个例子: $ 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; 错误的部分是: "${i

我无法让正则表达式在带有正则表达式作为注释的for循环中使用imagemagick

这只是我想写的一个例子:

$ 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;
错误的部分是:

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

注意:正则表达式做了我喜欢的事情。从起始和后缀中删除2个字符。

为什么要使用正则表达式。如果您只尝试删除前两个字符和后两个字符,那么子字符串可能更容易删除

用于*.jpg中的i
做
转换“$i”\
-填补空白\
-底色“#00000060”\
-重力南方\
-点大小30\
-注释+0+50“${i:1:${#i}-3}”\
“/caption/${i%.jpg}-title.jpg”
完成
根据评论编辑

如果您完全使用正则表达式,我建议您使用,或其他提供扩展正则表达式支持的实用程序

用于*.jpg中的i
做
TEXT=$(echo$i | sed-e's/^.\(.*\)..$/\1/'))
转换“$i”\
-填补空白\
-底色“#00000060”\
-重力南方\
-点大小30\
-注释+0+50“$TEXT”\
“/caption/${i%.jpg}-title.jpg”
完成

我对bash中的字符串操作非常陌生。我还是很困惑。但我对RegEx非常熟悉,您删除了RegEx解决方案。这将是一个伟大的工作正则表达式解决方案,因为它是非常灵活的未来需求。“${i:1:${#i}-3}”有效,但为什么“${i:1:-3}”和“${i:1:(-3}”无效?正如您所知,正则表达式可以很好地处理不同长度的字符串和不规则字符串。答案更新为包含正则表达式。我删除了regex,因为我觉得这是对的。再次感谢@emcconville!!sed版本与regex一起工作。但是sed有一些奇怪的regex实现。posix的不同语法等等。我最初的描述有点不清楚。从开始到整个后缀(任意长度)包含2个字符,包括分隔符。现在它看起来像:TEXT=$(echo$i | sed-e's/^.\{2\}(.*)\.[a-zA-Z0-9]*$/\1/'))