0

古い 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
4

1 に答える 1

5

@name正規表現パターン内の名前付き 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
于 2012-09-05T14:45:03.620 に答える