【发布时间】:2019-06-08 20:54:17
【问题描述】:
我想在基于 debian 的系统上使用 find . -name *.php -exec COMMAND {} \; 来删除这样的模式:
<?php
#bVj7Gt#
line1
...
lineX
#/bVj7Gt#
?>
<?php 之后的行 = 哈希 + 六个字母数字 + 哈希
?> 之前的行 = 哈希 + 斜杠 + 六个字母数字 + 哈希
【问题讨论】:
-
欢迎来到 StackOverflow!这个网站是关于帮助人们修复他们的代码的。这不是免费的编码服务。任何代码都比没有代码好。即使您不知道如何编写解决方案,元代码甚至会展示您认为程序应该如何工作。鉴于您包含的标签,我希望在您的问题中看到 bash、perl、awk 和 sed 代码。查看how-to-ask,在MCVE 中向我们展示您迄今为止所做的工作,您所期望的结果和您得到的结果,我们将帮助您解决问题。
-
我在 sed 和 awk 中使用以下正则表达式
<\?php\n\#[a-zA-Z0-9]{6}\#.*\?>进行了尝试,但没有得到有效的解决方案。 -
sed和awk只能逐行工作,因此多行正则表达式不会在那里轻松工作。你可以试试 Perl:perl -0777 -i.bak -wple 's/<\?php\s+#(\w{6})#.*?\s+#\1#\s+\?>//msg' -
内线有没有可能出现“?>”?
-
@Corion 不,awk 逐条记录,而不是逐行工作,因此 awk 可以与多行正则表达式一起使用。 sTealth 请edit您的问题包括简洁、可测试的样本输入(不仅仅是您要从该输入中删除的块)和预期输出,以便我们为您提供帮助。