>

PHP 소스 만grep하는 깔끔한 grep one-liner가 있습니까 ( <? 사이의 코드)  그리고 ?> ) PHP 파일에서? 지금까지 나는 시도했다 :

grep -oiE "<\?php[[:print:]]*\?>" name_of_php_file

그러나 다음과 같은 혼동 된 항목을 반환하는 것 같습니다 :

<?php print $row[0];?>"><img src="gallerybig/<?php echo $row[1];?>

혼란 된 항목없이PHP 소스를 반환하는 단일 라이너가 필요합니다. sed와 awk는 괜찮습니다.

<시간>

편집 :여러 줄에 걸쳐 있어도 예상되는 출력은 PHP 소스 코드입니다. "><img src="gallerybig/ 사이에 HTML이 포함되어 있으므로 샘플 출력이 잘못되었습니다.

<시간>

편집 2 :@SigmaPiEpsilon이 제공 한 답변은 효과가 있지만 grep은 여러 줄에 걸친 코드를 인쇄하지 않습니다. 예를 들어 다음 코드 스 니펫은 출력에 표시되지 않습니다.

<?php 
$str="select c_id,c_description,cate_name,date from book_table ;";
$res=mysql_query($str); ?>


  • 답변 # 1

    ? 를 추가하여 욕심없는 검색을 사용해야합니다   [[:print:]]* 후 . 이것은 일반적인 grep에서는 사용할 수 없지만 -P 를 지정하여 Perl 구문과 함께 사용할 수 있습니다   -E 대신 플래그 . man grep 확인  grep이이를 지원하는지 확인하십시오.

    $ Var='<?php print $row[0];?>"><img src="gallerybig/<?php echo $row[1];?>'
    $ echo $Var | grep -oiP "<\?php[[:print:]]*?\?>"
    <?php print $row[0];?>
    <?php echo $row[1];?>
    
    

    여러 줄에 걸쳐 이것을 일치 시키려면 개행 문자를 지정하고 -z 를 사용해야합니다  깃발. 정규식은 약간 까다로워 지지만 ? 와 욕심없는 일치를 지정하는 대신  보완 일치를 [^?] 로 사용할 수 있습니다   ? 를 제외한 모든 것과 일치 . 아래 참조

    $ cat test_php 
    <?php 
    $str="select c_id,c_description,cate_name,date from book_table ;";
    $res=mysql_query($str); ?>
    <?php print $row[0];?>"><img src="gallerybig/<?php echo $row[1];?>
    $ grep -oizP "<\?php[^?]*\n*\?>" test_php
    <?php 
    $str="select c_id,c_description,cate_name,date from book_table ;";
    $res=mysql_query($str); ?>
    <?php print $row[0];?>
    <?php echo $row[1];?>
    
    

  • 답변 # 2

    GNU awk로 지금까지 설명한 것을 수행 할 수 있습니다 :

    $ gawk -v RS='?>' 'RT{sub(/.*<\?/,"<?"); print $0 RT}' file
    <?php
    $str="select c_id,c_description,cate_name,date from book_table ;";
    $res=mysql_query($str); ?>
    
    

    그러나 ?> 를 설명하지 않기 때문에 분명히 강력하지 않습니다.  주석 내부 또는 문자열 내부 또는 HTML 내부 또는 ... 또는 원하는대로 수행할지 여부는 실제 입력에 존재하는 경우 아직 표시하지 않은 사소한 경우에 따라 다릅니다.

관련 자료

  • 이전 parallel processing - 어레이와의 CUDA 병렬화 작업
  • 다음 SpinnerModel 기능 예제 Java Swing