2015-04-02 82 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

'<\ \ S * PHP \ S +回声\ s + “*”; \ S * \>'? – 2015-04-02 12:42:47

回答

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

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