Perl:选择性字符串替换

时间:2012-08-03 05:21:09

标签: string perl substitution

我有一个文本文件,其中包含前缀为A_B _的字符串。

示例:A_B_Monday

我想用A_B_*替换X_Y_*的所有出现,除非*是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似乎不起作用。我在Strawberry Perl上。

更新: 这对我有用 perl -i.bak -pE“s / A_B _(?!Geneva)/ USB_EP_ / g”File.Txt

3 个答案:

答案 0 :(得分:3)

也许:

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

或:

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

答案 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

答案 2 :(得分:1)

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

您应该为文件的每一行执行此操作。