如何增加上一个命令中通过通配符找到的数字? (zsh)

如何增加上一个命令中通过通配符找到的数字? (zsh)

我想完成这个:

setopt HIST_SUBST_PATTERN
echo Ninja_Turtles_2003_S02E05_DVDRip_30NAMA.mkv
^E(0?)^E$((match[1]+1))
# resulting in:
echo Ninja_Turtles_2003_S02E06_DVDRip_30NAMA.mkv

但我得到:

echo Ninja_Turtles_2003_S02E1_DVDRip_30NAMA.mkv

我尝试过^(#b)E(0?)^E$((match[1]+1)),但没有成功。

答案1

您需要extendedglob的选项(#b)

还得05 + 1606

你可以(用extendedglobhistsubstpattern

^(#b)E(<->)^E${(l:2::0:)$((match[1]+1))}

或者:

echo ${_//(#b)E(<->)/${(l:2::0:)$((match[1]+1))}
  • <->是正十进制数匹配运算符的一种形式<x-y>,其中两个边界都被省略,因此匹配任何非空的十进制数字序列。相同[0-9]##(尽管##需要扩展全局变量,但<x-y>不需要)。
  • (l:2::0:)(请注意,它是小写 L,而不是数字1)是左侧填充参数扩展标志,此处为0s,长度为2

相关内容