このPerlスクリプトがgit-for-windowsやLinuxのWindowsサブシステムとは異なる結果を与えるのはなぜですか?

このPerlスクリプトがgit-for-windowsやLinuxのWindowsサブシステムとは異なる結果を与えるのはなぜですか?

git-for-windowsを介して同じperlスクリプトを実行するときと、Windowsスクリプトホスト(VBAモジュールで)を実行すると異なる結果が得られます。

Perl コマンドは次のようになります。

perl -pi -e 's/\bxlYes\b([^(\n|\r|\x27]*)/1$1 \x271=xlYes;/' -- *.*

その目的は、与えられた定数を長い値に置き換えてから、情報コメントを追加することです。

上記のコマンドはgit-for-windowsで完全に動作します。たとえば、次のコード行は次のようになります。

Set ListObject = Worksheet.ListObjects.Add(xlSrcRange, rng, , xlYes)

...次のように(正確に)なります:

Set ListObject = Worksheet.ListObjects.Add(xlSrcRange, rng, , 1) '1=xlYes;

Windowsスクリプトホスト(VBA)を介して同じコマンドを実行するときは、次のようにコマンドをラップする必要があります。

bash -c "perl -pi -e 's/\bxlYes\b([^(\n|\r|\x27]*)/1$1 \x271=xlYes;/' -- *.*"

ただし、これを行うと同じコード行が表示されます。

Set ListObject = Worksheet.ListObjects.Add(xlSrcRange, rng, , xlYes)

...次のように(間違って)なります。

Set ListObject = Worksheet.ListObjects.Add(xlSrcRange, rng, , 1 '1=xlYes;

(欠落している閉じ括弧に注意してください)。

バージョンの問題かもしれませんか?


git-for-windows: bash バージョン 4.4.23(1)-release; Linux
Windows サブシステム用 perl v5.30.2: bash バージョン 4.4.20(1)-release;

(この質問に関する正しいフォーラムでない場合は、許してください。)

答え1

[^\n\r\x27]@ruud ありがとうございます。代わりに使用する必要があります。[^(\n|\r|\x27]

@Rakesh Sharmaに感謝します。$1二重引用符ラッパーにエスケープしてトリックを実行しました。

生の:

perl -pi -e 's/\bxlYes\b([^\n\r\x27]*)/1$1 \x271=xlYes/' -- basAggregate.bas

包装を含む:

bash -c "perl -pi -e 's/\bxlYes\b([^\n\r\x27]*)/1\$1 \x271=xlYes/' -- basAggregate.bas"

助けてくださった皆さん、本当にありがとうございました!

関連情報