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"
도움을 주신 모든 분들께 진심으로 감사드립니다!