简体   繁体   English

在Perl中搜索和替换多行模式

[英]Multiple Line Pattern Search and replace in perl

I am trying to use a regular expression to do a search and replace using perl I want to insert a SQL connect statement between a JOB INPUT line and SQL OPEN line. 我试图使用正则表达式进行搜索并使用perl替换我想在JOB INPUT行和SQL OPEN行之间插入SQL connect语句。 Here are the patterns of the input 这是输入的模式

JOB INPUT NULL 职位输入为空
SQL OPEN CURSOR SQL OPEN游标

JOB INPUT RANKEY 工作输入范围
KEY1=KEY2 KEY1 = KEY2
SQL OPEN CURSOR SQL OPEN游标

JOB INPUT RANKEY 工作输入范围
KEY1=KEY2 KEY1 = KEY2
KEY3=KEY3 KEY3 = KEY3
SQL OPEN CURSOR SQL OPEN游标

This has to be changed to the following 这必须更改为以下内容

JOB INPUT NULL 职位输入为空
SQL CONNECT TO DATABASE USER USER-ID USING PAS-WD 使用PAS-WD的SQL连接到数据库用户的用户ID
SQL OPEN CURSOR SQL OPEN游标

JOB INPUT RANKEY 工作输入范围
KEY1=KEY2 KEY1 = KEY2
SQL CONNECT TO DATABASE USER USER-ID USING PAS-WD 使用PAS-WD的SQL连接到数据库用户的用户ID
SQL OPEN CURSOR SQL OPEN游标

JOB INPUT RANKEY 工作输入范围
KEY1=KEY2 KEY1 = KEY2
KEY3=KEY3 KEY3 = KEY3
SQL CONNECT TO DATABASE USER USER-ID USING PAS-WD 使用PAS-WD的SQL连接到数据库用户的用户ID
SQL OPEN CURSOR SQL OPEN游标

I used the following regular expression 我使用以下正则表达式

( s{^(\s*job\s+input.*\n?.*?)}{$1\n$sql_connect\n}im )

$sql_connect has the value "SQL CONNECT TO DATABASE USER USER-ID USING PAS-WD" $ sql_connect的值为“使用PAS-WD的SQL CONNECT TO DATABASE USER USER-ID”

I am getting the below result 我得到以下结果

JOB INPUT NULL 职位输入为空
SQL CONNECT TO DATABASE USER USER-ID USING PAS-WD 使用PAS-WD的SQL连接到数据库用户的用户ID
SQL OPEN CURSOR SQL OPEN游标

JOB INPUT RANKEY 工作输入范围
SQL CONNECT TO DATABASE USER USER-ID USING PAS-WD 使用PAS-WD的SQL连接到数据库用户的用户ID
KEY1=KEY2 KEY1 = KEY2
SQL OPEN CURSOR SQL OPEN游标

JOB INPUT RANKEY 工作输入范围
SQL CONNECT TO DATABASE USER USER-ID USING PAS-WD 使用PAS-WD的SQL连接到数据库用户的用户ID
KEY1=KEY2 KEY1 = KEY2
KEY3=KEY3 KEY3 = KEY3
SQL OPEN CURSOR SQL OPEN游标

Can I do it through regular expression? 我可以通过正则表达式来做到吗?

You could try the following: 您可以尝试以下方法:

s{^(\s*job\s+input.*?)^(\s*sql\s+open.*?\n)}{$1$sql_connect\n$2}imsg

It seems to work for me. 它似乎为我工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM