[在构建服务器上使用后锚name%pattern
运算符,并输入了类似以下的输入字符串:
remainstr1-remaingstr2--9.99.9-remainstr3-20190920.115934-4.zip
[我需要20190920.115934-4.zip
要除去的零件。
我设法使用通配符字符和文字成功地应用了此转换。但是我无法通过使用+
量词指定给定范围的多次出现来使其工作。 (除去部分中的数字当然可以是任何数字)。
到目前为止,以下模式有效((当然,用.*
替换\.zip
部分也可以):
REMAIN_STRING=${START_STRING%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9].*}
但是这看起来绝对不够优雅,我想指定数字字符类([0-9]
)的多次出现,但是我可以使它起作用。
我显然尝试过
REMAIN_STRING=${START_STRING%[0-9]+.[0-9]+-[0-9].*}
[还有带或不带括号的多种可能,反斜杠转义,但REMAIN_STRING只是与START_STRING保持相同。
我还尝试将模式存储为变量,如一些示例所示:X="[([0-9]+)-([0-9]+).zip]"
,然后:REMAIN_STRING=${START_STRING%$X}
但是全部失败!
现在让我感到沮丧,甚至更多,因为我没有收到任何错误消息。只是什么都没有发生。
所以,我问自己:name%pattern
和类似的运算符可以处理复杂/扩展的正则表达式,还是在某个地方缺少简单的转义符?
我尝试了本杰明建议的extglob,并测试了几种选择,但未成功。
[Benjamin W.建议设置extglob
为好,只是给定的模式不完整;这个作品:
shopt -s extglob
REMAIN_STRING=${START_STRING%-+([0-9]).+([0-9])-[0-9].*}-