Perl 스크립트에서 잘못된 결과 반환

Perl 스크립트에서 잘못된 결과 반환

Linux 쉘에서 이 명령을 실행했는데 원활하게 실행되었습니다.

sed -i 's/\[-.*-]//g' error .txt

그것이 하는 일은 [-모든 텍스트-]와 같은 패턴과 대괄호 및 - 기호를 제거하는 것입니다.

하지만 Perl 스크립트를 통해 실행하려고 하면 "-" 기호만 제거됩니다.

나는 사용하려고 system("sed -i 's/\[-.*-]//g' error.txt");

내가 뭘 잘못했나요?

답변1

Perl에서는 문자열에 큰따옴표가 사용되므로 \문자열은 Perl에서 해석됩니다.

이중 백슬래시를 사용하십시오. 즉,system("sed -i 's/\\[-.*-]//g' error.txt");

또는 [[]대신 사용하십시오 \[. 즉, system("sed -i 's/[[]-.*-]//g' error.txt");
이 변형은 셸에서도 작동합니다.

답변2

Perl에서 큰따옴표로 묶인 문자열 안의 백슬래시는 Perl에 의해 해석되므로 실행되는 명령은 다음과 같습니다.

 sed -i 's/[-.*-]//g' error.txt

마이너스, 점, 별표 문자가 제거됩니다. 두 번째로 마이너스를 나열한다는 사실은 sed를 걱정하지 않습니다.

Perl에는 많은 인용 도구, 특히 연산자가 있습니다 q.

 system(q(sed -i 's/\[-.*-]//g' error.txt));

작동합니다. 바라보다man perlop

관련 정보