如何通过增加数字部分来查找和替换字符串?

tam*_*mal 3 command-line sed awk

我的输入文件是,

ami21 ami65
ami67 ami66
ami88 ami76 ami29
ami55 
ami54
ami32
Run Code Online (Sandbox Code Playgroud)

使用单个命令行我需要输出,

ami22 ami66
ami68 ami67
ami89 ami77 ami30
ami56
ami55
ami33
Run Code Online (Sandbox Code Playgroud)

我使用了命令

awk -vRS=ami '{$0=$0+1;ORS=RT}++n' inputfile > outputfile
Run Code Online (Sandbox Code Playgroud)

但我得到了输出文件 ami21ami65ami67ami66ami88ami76ami29ami55ami54ami32

即所有字符串都写在同一行中并且没有空格。谁能建议我一些更好的命令行。

mur*_*uru 5

使用它可能更容易perl

$ perl -pe 's/(\d+)/$1+1/eg' foo
ami22 ami66
ami68 ami67
ami89 ami77 ami30
ami56 
ami55
ami33
Run Code Online (Sandbox Code Playgroud)
  • -pe: 逐行循环遍历文件,在计算表达式后打印每一行
  • s/(\d+)/$1+1/e: 匹配一个数字 ( \d+),并用它的增量 ( $1+1)替换它,e用于告诉 Perl 评估替换。

使用awk,您必须在记录分隔符中包含空格:

$ awk -v RS='[[:space:]]*ami[[:space:]]*' '$0{$0++;}{ORS=RT}1' foo
ami22 ami66
ami68 ami67
ami89 ami77 ami30
ami56 
ami55
ami33
Run Code Online (Sandbox Code Playgroud)

  • 我正要提出相同的 perl 代码 :)。您需要将 /g 添加到您的正则表达式中,因为只有第一个匹配会增加。 (2认同)