2012-08-03 91 views
0

我有一個文本文件,其中包含帶前綴A_B_的字符串。Perl:選擇性字符串替換

例子:A_B_Monday

我想與X_Y_*取代的A_B_*所有出現在*爲C除外。

因此,所有A_B_*但不是A_B_C的字符串都必須替換爲X_Y_*

這應該如何在Perl中完成?

編輯:1 *上面是一個字符串。因此,所有不是A_B_Geneva的A_B_ *都應該替換爲X_Y_NewYork。 perl -pi.bak -e's/^ A_B _(!Geneva)/ X_Y_/g;' File.Txt似乎不起作用。我在草莓Perl。

更新: 這爲我工作 perl的-i.bak -PE 「S/A_B _(?!日內瓦)/ USB_EP_/G」 FILE.TXT

+0

正如已指出的兩倍,將爲'A_B_Genevaxxx' – ikegami 2012-08-03 14:49:02

回答

3

可能:

s/^A_B_(?!C)/X_Y_/; 

或:

s/^A_B_(?!C)/X_Y_/i; 
+0

失敗我的命令行程序如下:perl的-pi.bak -e「/ S/^ A_B _(?!Type)/ X_Y_/g;「File.Txt這不起作用。 – Raj 2012-08-03 05:58:48

+0

perl -i.bak -pE「s/^ A_B _(?!C)/ X_Y_ /」File.txt – cdtits 2012-08-03 06:49:27

+0

這是最接近的。我必須刪除^並應用/ g。非常感謝大家。我正在學。 – Raj 2012-08-03 13:58:33

1
$line =~ s/^A_B_([^C])/X_Y_$1/; 

您應該爲每個行做到這一點的文件。

3
s/^A_B_(?!Type\z)/X_Y_/; 

沒有\zA_B_Typed將不會更改爲X_Y_Typed,因爲它應該。

你可以用它如下:

perl -pi.bak -pe"s/^A_B_(?!Type\z)/X_Y_/g" file 
+0

在我的回答中添加了一行代碼。 – ikegami 2012-08-03 07:54:22

+0

'^'錨點呈現'/ g'不必要。 – Zaid 2012-08-03 11:51:27