你能帮我解决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 :(得分: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'; ?>