exec sed中的正则表达式

时间:2015-04-02 12:35:34

标签: regex seq

你能帮我解决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' {} \;

但这种方法无法正常工作。 (删除所有代码)

2 个答案:

答案 0 :(得分:2)

使用否定的字符类而不是.*,因为.*是贪婪的,尽可能匹配任何字符。

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

您可以在上面使用-name '*.php'代替-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; ?>

答案 1 :(得分:0)

使用gnu 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'; ?>