String Perl或shell—从字符串变量中获取数字,并将数字递增1

String Perl或shell—从字符串变量中获取数字,并将数字递增1,string,perl,shell,increment,String,Perl,Shell,Increment,我正在用shell编写一个脚本,我有一个这样的变量- $ grep A41A41 file A41A41 06 我想grep一个特定的字符串组合,如上图所示,并将与该字符串相关联的数字(在同一行中,2个空格后)增加1。并保持文件的其余部分不变(该文件将有大约800行)。 09应该变成10,99应该变成01。 此外,A41A41将是一个变量,在for循环中,该变量的值将在每次迭代中更改 我在一个for循环中做这一切,所以我也需要考虑递增的性能。 感谢您帮助解决此问题。现在还不清楚09会发生什么

我正在用shell编写一个脚本,我有一个这样的变量-

$ grep A41A41 file
A41A41  06
我想grep一个特定的字符串组合,如上图所示,并将与该字符串相关联的数字(在同一行中,2个空格后)增加1。并保持文件的其余部分不变(该文件将有大约800行)。 09应该变成10,99应该变成01。
此外,A41A41将是一个变量,在for循环中,该变量的值将在每次迭代中更改 我在一个for循环中做这一切,所以我也需要考虑递增的性能。
感谢您帮助解决此问题。

现在还不清楚09会发生什么-应该变成10还是010

Perl中的前者:

perl -i~ -pe 's/(A41A41\s+)([0-9]+)/sprintf "%s%02d", $1, $2 + 1/e' file
要获得99->01转换,请使用

($2 + 1) % 99 || 99

变量在哪里?你确定
99
+1应该变成
01
,而不是
00
?A41A41将是一个变量,在for循环中,该变量的值在每次迭代中都会改变。谢谢,09应该变成10,99应该变成01。是的,Walter。99+1应该变成01。Jens,我试过了,grep->storenumber in a variable->increment->rewrite。但是考虑到大约800次迭代,这是非常缓慢的,我觉得这不是正确的方法。
($2+1)%99
——但是我们有98->00@glennjackman:
s/(\Q$ENV{key}\E\s+)。
,另外请参阅如何解决98->00:-)的更新