替换除Perl中的第一次出现

时间:2013-10-09 07:37:20

标签: perl

我有一个文件,其中所有服务器都列为Dominos_A

除第一场比赛外,是否可以将Dominos_A更改为Dominos_BDominos_C

FILEA:

  ..
  ....
  .....
  Server = Dominos_A.check
  ..
  .
  Server = Dominos_A.check
  Server = Dominos_A.check
  ..
  .
  Server = Dominos_A.check

FILEA:

  ..
  ....
  .....
  Server = Dominos_A.check
  ..
  .
  Server = Dominos_B.check
  Server = Dominos_C.check
  ..
  .
  Server = Dominos_D.check
  ..

我尝试使用substr,但仍然无法进行更改。

2 个答案:

答案 0 :(得分:4)

如果你的上一次出现不超过Z个字母,你可以

perl -i -pe'
  BEGIN{ @r = "A" .. "Z" }
  s|Dominos_\K\w| shift @r |e;
  # for perl 5.8 or older
  # s|(Dominos_)\w| $1 . shift @r |e; 
' FileA

答案 1 :(得分:1)

@ mpapec ..遗憾的是,这不适用于我的带有perl v5.8.4的solaris盒。

所以我写了一个对我有用的略有不同。

> perl -pe 'BEGIN{@r="A".."Z";$i=0}s/(Dominos_)A/$1$r[$i++]/g' temp
  ..
  ....
  .....
  Server = Dominos_A.check
  ..
  .
  Server = Dominos_B.check
  Server = Dominos_C.check
  ..
  .
  Server = Dominos_D.check
>