2013-10-09 12 views
1

我有一個文件,其中所有服務器列爲Dominos_A替換Perl中的第一個出現除外

是否有可能將Dominos_A的發生更改爲Dominos_B,Dominos_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,我仍無法得到改變。

+1

請張貼您當前的代碼(帶'substr'的​​東西) –

回答

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 
+0

Tx一噸。沒有文件停在P. tx再次一堆 – zXi

+0

不錯。但是's /(...).../$ 1 ... /'模式可以通過向後看來避免,例如's/Dominos_ \ K \ w/shift @ r/e'。 – amon

+0

@amon一如既往感謝您的評論 –

1

@ mpapec..Unfortunately這並不在我用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 
> 
相關問題