다음 스크립트를 사용하고 있는데 예상치 못한 출력이 나타납니다.
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