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

时间:2010-12-21 11:37:17

标签: regex perl string

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

现在通常当我有一堆搜索和替换执行时,我只需写一个快速的perl单行,如:

perl -pi -e 's/searched/replacement/g' *.c

但是如何插入替代品呢?

3 个答案:

答案 0 :(得分:9)

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

perl -pi -e 's/searched/"replacement".++$i/ge' *.c

演示:

$ cat file
hi foo
hey foo
bye foo

$ perl -p -e 's/foo/"bar".++$i/ge' file
hi bar1
hey bar2
bye bar3

答案 1 :(得分:4)

这对我有用:

perl -pi -e 's/one/"replacement".$counter++/ge' *.c

答案 2 :(得分:1)

编辑:OOPS如果您的主项目也在perl中,这可能会有所帮助。

这可能有些偏离主题,但是如何在日志消息中添加自动位置检测呢?喜欢,

sub whereami {
    my $shout = shift;
    my @stack = caller(1);
    print LOG "$stack[1]:$stack[2]: $shout\n";
}

(见perldoc来电)

甚至更好,use Log::Log4perl qw/:easy/; - 这可能是一种矫枉过正,但值得一试。