2015-04-02 2 views
1

Не могли бы вы помочь мне с регулярными выражениями в exec sed?регулярные выражения в exec sed

Пример кода:

<?php   echo "This code need to delete"; ?><? echo 'This code need to keep'; ?> 

нужно удалить: <?php echo "This code need to delete"; ?>

Во всех файлах, и держать <? echo 'This code need to keep'; ?>

Я попытался сделать это следующим образом:

find ./ -type f -name \*.php -exec sed -i -r 's/<\?php.*\?>//g' {} \; 

Но этот способ работает неправильно. (удалить весь код)

+0

'<\ \ с * PHP \ s + эхо \ s + "*."; \ s * \> '? –

ответ

2

Используйте отрицательный класс символов вместо .*, потому что .* жадный, который соответствует любому персонажу как можно больше.

find ./ -type f -name \*.php -exec sed -i -r 's/<\?php[^>]*\?>//g' {} \; 

Вы можете использовать -name '*.php' вместо в выше.

Пример:

$ echo '<?php   echo "This code need to delete"; ?><? echo 'This code need to keep'; ?>' | sed -r 's/<\?php[^>]*\?>//g' 
<? echo This code need to keep; ?> 
0

Использование гну AWK вы можете сделать это, чтобы избавиться от первого <?php...?> блока:

cat file 
<?php   echo "This code need to delete"; ?><? echo 'This code need to keep'; ?> 

awk -v RS='\\?>' '!/<\?php /{printf $0 RT}' file 
<? echo 'This code need to keep'; ?>