在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 - /;
答案 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;