如何使用sed查找以“X”开头的行,然后使用Perl在此行中查找和替换?

时间:2014-08-10 23:28:47

标签: perl sed

在bash脚本中,我已多次成功使用此方法:

sed -i '/^drop/s/(msg:"/(msg:"drop - /' /file

我认为对于perl来说,一个简单的查找和替换为sed是这样的:

s/^alert/drop/;

如何复制perl中的第一行以查找以drop开头的行,然后在此行msg: "内找到并将其替换为msg: "drop -

我试过这个没有成功。

s/^drop/ s/(msg:\"/(msg:\"drop - /;

3 个答案:

答案 0 :(得分:3)

s/^(drop.*msg:")/${1}drop - /;

在更复杂的情况下(例如,如果您想添加/g),您可能需要遵循以下模式的内容:

/^drop/ && s/(msg:")/${1}drop - /;

或者如果你有Perl 5.10 +,

s/^drop.*msg:"\K/drop - /;

/^drop/ && s/msg:"\K/drop - /;

答案 1 :(得分:0)

perl -i  -pe '/^drop/ && s/\(msg:"/\(msg:"drop - /' /file 

首先测试它,而不是#34;到位"文件修改(更改的内容打印到stdout):

perl -pe '/^drop/ && s/\(msg:"/\(msg:"drop - /' /file 

答案 2 :(得分:0)

它可能并不理想 - 但您可以查看使用正则表达式的组来获取“drop”和“msg”之间的文本,并将所述文本插入到替换字符串中。

$value =~ s/^drop(.*)msg: \"/drop$1msg: "drop -/g;