古い MySQL コマンドを検索して置き換えるために perl を使用しようとしています。
perl -i -pe 'BEGIN{undef $/;} s/if @RequestID.*@NextValue=@TableNameID output/if @RequestID is not NULL\n begin\n select @TableNameID = @TableNameID + 1/smgi' $file1
ただし、現在、正規表現が一致しないことを意味する前後で、ファイルはまったく同じままですか?
フラグsmgi
がオンになっているため、複数行検索.*
からのアドバイスを取得して新しい行にも一致し、Perl に置き換えます
これは、一致させようとしているファイルの抜粋です
if ( @@rowcount = 0 )
return 1
update Sequence set CurrentValue = @TableNameID where Code = 'TableName'
end
/* TableNames - Approval Request ID */
if @RequestID is not NULL
begin
exec spGetNextSequence @Name='TableName', @NextValue=@TableNameID output
insert into TableName /* RequestID */
(
TableNameID,
TxnVrsnID,
FldNmCod,
http://regexpal.com/ (または同様の正規表現テスター)でパターンをテストすると、smi
うまく一致しますか?
パターン:if @ApprovalRequestID.*@NextValue=@TxnDecoratorID output
これは perl をわずかに分割したもので、何が起こっているかがわかります
perl -i -pe 'BEGIN{undef $/;} s/
if @RequestID.*@NextValue=@TableNameID output/
if @RequestID is not NULL\n
begin\n
select @TableNameID = @TableNameID + 1
/smgi' $file1