Hap*_*ace 1 regex string perl command-line sed
我目前使用此perl命令来增加字符串中的最后一个数字:
perl -pe 's/(\d+)(?!.*\d+)/$1+1/e' <<< "abc123_00456.txt"
Run Code Online (Sandbox Code Playgroud)
它输出abc123_457.txt,而我想要abc123_00457.txt。
我也想99增加到100,尽管如果太难了00也是可以接受的。
我想要的其他一些示例:
09 -> 10
004 -> 005
Run Code Online (Sandbox Code Playgroud)
我还希望能够增加任意数量(不只是1),所以不可以++。
我不想使用shell的内置函数来完成此任务。
尝试这个:
perl -pe 's/(\d+)(?=\D*\z)/my $n = $1; ++$n/e' <<< "abc123_00456.txt"
Run Code Online (Sandbox Code Playgroud)
递增字符串时,++运算符将保留位数。
或者:
perl -pe 's/(\d+)(?=\D*\z)/sprintf "%0*d", length($1), $1 + 1/e' <<< "abc123_00456.txt"
Run Code Online (Sandbox Code Playgroud)
这样一来,您就可以增加不止1(或执行其他算术运算)。
sprintf %d用十进制格式格式化整数。0表示用零填充结果;*表示最大字段宽度取自下一个参数,而不是格式字符串本身。(例如,%05d意思是“通过用零填充数字来格式化数字,直到其宽度至少为5个字符”。)
在这里,我们只是简单地获取原始数字串(length($1))的长度,并将其用作字段宽度。要格式化的数字是$1 + 1。如果比原始字符串短,则sprintf自动添加零。
另请参阅perldoc -f sprintf。