用递增数替换字符串的正则表达式

时间:2015-08-11 15:07:07

标签: regex replace awk sed increment

曾几何时我使用UltraEdit来制作这个

text 1
text 2
text 3
text 4
...

来自

text REPLACE
text REPLACE
text REPLACE
text REPLACE
...

就像用REPLACE

替换\i一样简单

现在,我怎么能用例如。 sed

如果您提供解决方案,是否可以添加前导零填充结果的说明?

感谢

3 个答案:

答案 0 :(得分:3)

你可以使用awk代替sed:

GRANT SELECT ON SYSTEM.* TO appadmin;

Code Demo

答案 1 :(得分:1)

这是你想要的吗?

library(lattice)
library(MASS)

splom(iris, upper.panel = function(x, y, ...) {
  if(is.numeric(x) & is.numeric(y)){

    # calculate bivariate kernel density 
    f1 <- kde2d(x = x, y = y, n = 20) #, lims = c(0, 10 ,0, 10))

    f <- data.frame(x = f1$x, y = rep(f1$y, each = length(f1$x)), 
                    z = as.vector(f1$z))

    panel.contourplot(x = f$x, y = f$y, z = f$z,  
                      contour = TRUE, ...)
    }
    panel.xyplot(x, y, ...)
  })

如果没有,请编辑您的问题,以显示更具真实代表性的示例输入和预期输出(并且如果他们在您的输入和输出中确实不存在$ awk '{$NF=sprintf("%05d",++i)} 1' file text 00001 text 00002 text 00003 text 00004 ,那么就摆脱...示例不可测试的。)

答案 2 :(得分:1)

perl -i -pe 's/REPLACE/++$i/ge' file

对于零填充到最小宽度(即如果有10个替换,则使用字段宽度2):

perl -i -pe '
    BEGIN {
        $patt = "REPLACE"; 
        chomp( $n = qx(grep -co "$patt" file) ); 
        $n = int( log($n)/log(10) ) + 1;
    } 
    s/$patt/ sprintf("%0*d", $n, ++$i) /ge
' file