我有一堆包含完全相同的日志消息的文件。其中一个发生,但由于消息相同,我不知道哪一个。我想要做的是在所有这些消息之后添加一个数字以区分它们。
现在通常当我有一堆搜索和替换执行时,我只需写一个快速的perl单行,如:
perl -pi -e 's/searched/replacement/g' *.c
但是如何插入替代品呢?
答案 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/;
- 这可能是一种矫枉过正,但值得一试。