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"
助けてくださった皆さん、本当にありがとうございました!