내 문제는 이것이다 : 내가 다음 명령을 사용하여 여러 스크립트 (<?
<php?
에) 모든 태그를 변경하려고 :변경 PHP 태그
find . -name "*.php" -type f -print0 | xargs -0 sed -i -e 's/<? /<?php /g'
문제는 그 나는 레이블 등이있는 경우 이 <?echo'Ble bla..';
은이를 무시하고 변경되지 않습니다. 나도 좋습니다.
내 문제는 이것이다 : 내가 다음 명령을 사용하여 여러 스크립트 (<?
<php?
에) 모든 태그를 변경하려고 :변경 PHP 태그
find . -name "*.php" -type f -print0 | xargs -0 sed -i -e 's/<? /<?php /g'
문제는 그 나는 레이블 등이있는 경우 이 <?echo'Ble bla..';
은이를 무시하고 변경되지 않습니다. 나도 좋습니다.
:
find -type f -name "*.php" -exec sed -i ':a;N;$!ba;s/<?\([ \n]\|echo\)/<?php \1/g' {} \;
그것은 공백이나 줄 바꿈 또는 <?
후 용어 echo
중 하나와 일치됩니다 다음은 <?php<match_found>
참고로 대체 당신 돈 xargs
전화가 필요하지 않습니다. find
의 -exec
옵션을 사용하면됩니다. 또한 -e
옵션을 sed
으로 지정하는 것은 단일 표현식을 사용하는 한 필요하지 않습니다. 또한 -type
기준은 -name
옵션 이전이어야합니다. 그렇지 않으면 find는 경고를 던집니다.
위대한 작품이지만 구문을 이해하지 못해, 고마워요! – user3680708
약간의 고급 sed 사용법입니다. 기본적으로'
검색 유형 f-name "* php"가 여전히 작동합니다. - Exec sed-i 's/\ ([\ n] \ | echo \)/
당신은 PHP와 함께 할 항상 수 :
#!/usr/bin/php
<?php
foreach (glob("./*.php") as $fn) {
$data = file_get_contents($fn);
$data = preg_replace("/<\?php/", "<?", $data);
$data = preg_replace("/<\?[\b\n\s]*/", "<?php ", $data);
file_put_contents("./$fn", $data);
}
PHP로 속임수를 고맙습니다. 이런 종류의 일을하고 싶지 않습니다. 하지만 당신에게 친구 감사합니다! – user3680708
는 앙드레 먼저 @, 나는이 대답을하고 있었다. 그런데'* .php'로 끝나고' xml'과 같은 템플릿이있을 것이라고 생각했습니다. – hek2mgl
@ hek2mgl 저자의 문제입니다. 수정 된 파일을 빠르게 살펴보고 그러한 구문이 있는지 확인해 볼 수는 있습니다.하지만이 내용에 대해서는 언급하지 않았으므로 게시했습니다. 어쨌든 당신은 더 나은 대답을 올렸습니다. :) –
@ André이 코드를 추가 한 경우이를 바꿀 수 있지만 이미 user3680708