У меня есть действительно старый код (php 5.1), который должен запускаться на более новом сервере.Sed заменить <? с <? php
Новый сервер имеет PHP 5.6, поэтому любые области, где
<?
используется, чтобы открыть контекст PHP, тем не интерпретируются правильно. Мне нужно заменить все экземпляры
<?
с
<?php
кроме где
<?
уже является частью
<?php
Мои усилия были Начальное использовать обратные ссылки и СЭД:
cat file.php | sed -i 's/<?([^php])/<?php\$1/g'
Однако,(), кажется, разорвать матч, и без него я не могу иметь надлежащую обратную ссылку.
Я пытался получить то, что было после того, как PHP открывающий тег в обратной ссылки, так что я мог повернуть линии, как:
<?=$_COOKIE...
в
<?php=$_COOKIE...
И, пожалуйста, не направляйте меня: Using sed to replace <? with <?php. Я уже видел это, и это не касается того факта, что у меня уже есть новый тег открытия в некоторых местах, а старый - в других. (Один из ответов вроде бы, но я бы предпочел не создавать «phpphphphpphp» и искать его снова и снова, чтобы уменьшить его до «php».
Наконец, пожалуйста, простите, . Так может не отображать их в соответствии с текстом, только если они находятся в блоке кода
'[^ php]' не соответствует тексту, не равному 'php', он соответствует только 1 символу, который является либо' p', либо 'h'. ИМХО, вы не можете сделать это с надежным sed, поскольку он не поддерживает поисковые запросы. –
Правильное регулярное выражение woulld должно быть чем-то вроде этого '<\? (?! php)', но, как указано в WiktorStribiżew, 'sed' не поддерживает отрицательные образы. –
Я не знал, что он не поддерживает негативные образы. Похоже, мне придется записывать это на Python ... спасибо, господа. – DrDamnit