Perl에서 "내부"를 탈출하는 방법은 무엇입니까?

Perl에서 "내부"를 탈출하는 방법은 무엇입니까?

다음 스크립트를 사용하고 있는데 예상치 못한 출력이 나타납니다.

perl -pi -e '/DB_CHARSET/ and $_.="define('SOMETHING'/, true);\n"' file.txt

이 명령은 추가합니다define(SOMETHING, true);

텍스트가 '로 시작하고 그 안에 "가 있으므로 'SOMETHING을 이스케이프하여 로 끝나게 하려면 어떻게 해야 합니까 define('SOMETHING', true)?

나는 평소의 \를 시도했지만 도움이 되지 않았습니다.

답변1

'각각을 로 변경할 수 있습니다 '\''. 그러나 이는 빠르게 추악해질 수 있습니다.

더 나은 아이디어는 스크립트에 대해 여기 문서를 사용하는 것입니다.

perl -pi - <<'EOT' file.txt
/DB_CHARSET/ and $_.="define('SOMETHING'/, true);\n"
EOT

주변 따옴표를 참고하세요 EOT. here 문서 종결자가 (작은 따옴표 또는 큰 따옴표) 안에 없으면 $시작 변수, 산술 대체, 백틱 등이 here 문서에서 확장됩니다. 이는 작은따옴표만 변수 확장을 방지하는 Perl의 여기 문서와 약간 다릅니다.

답변2

예를 들어 Perl 문자열에서 \x27(16진수 문자 코드)를 사용할 수 있습니다 .'

$ perl -e 'print "foo\x27bar"' -l
foo'bar

또는 Perl에 원시를 제공하기 위해 쉘에서 참조를 처리합니다 '.

$ perl -e 'print "foo'\''bar"' -l
foo'bar

(첫 번째는 '따옴표 붙은 문자열을 끝내고 \'따옴표를 삽입하고, 세 번째는 '새 따옴표 붙은 문자열을 시작합니다.)

답변3

한 가지 방법은 Perl 명령줄에서 기본 스위치 처리를 사용한 -s다음 거기에 작은따옴표를 정의하는 것입니다.

$ perl -spi -e '$_  .= qq/define(${q}SOMETHING$q, true);/' -- -q=\'   file 

관련 정보