搜索和替换字符串,并在替换中放置一个计数器

kri*_*iss 5 regex string perl

我有一堆包含完全相同的日志消息的文件.其中一个发生,但由于消息相同,我不知道哪一个.我想要做的是在所有这些消息之后附加一个数字以区分它们.

现在通常当我有一堆搜索和替换执行我只是写一个快速perl单行像:

perl -pi -e 's/searched/replacement/g' *.c
Run Code Online (Sandbox Code Playgroud)

但是如何插入替代品呢?

cod*_*ict 9

您可以使用e正则表达式修饰符将正在运行的计数器值附加到替换项:

perl -pi -e 's/searched/"replacement".++$i/ge' *.c
Run Code Online (Sandbox Code Playgroud)

演示:

$ cat file
hi foo
hey foo
bye foo

$ perl -p -e 's/foo/"bar".++$i/ge' file
hi bar1
hey bar2
bye bar3
Run Code Online (Sandbox Code Playgroud)