正则表达式匹配多个文件中的值

时间:2013-05-30 18:58:31

标签: regex redhat

我在linux(redhat)文件系统上有一堆php文件,大多数文件似乎没问题,因为他们使用抽象数据库交互的函数,但是我发现一些使用内联查询的地方而不是抽象层功能

这些查询似乎设计为与mysql一起运行,但我们正在运行Oracle,因此在检查空值时会出现故障,例如:

select name from user where name !=''

在Oracle中,此查询永远不会返回任何行,我需要像这样更改它:

select name from user where name !=' ' 

我已经能够在我现在经历的文件中解决这个问题。我想主动找到其他文件中出现这种情况的地方;但是,要检查的许多目录中有很多.php文件

是否可以在某个目录下的所有.php文件中运行搜索,以查找=''或!=''

等文本的出现情况

这是来自/ lib /中使用嵌入式查询的文件之一的真实示例

$rs = $DB->get_recordset_sql (
"SELECT *
    FROM {user}
        WHERE confirmed = 1 AND lastaccess > 0
        AND lastaccess < ? AND deleted = 0
        AND (lastname = '' OR firstname = '' OR email = '')"

我正在考虑沿着这些行“”。* \''。* \“寻找嵌套在双引号内的双撇号的方法。 但是我对linux没有那么自信使搜索工作并能够遍历多个文件!

\$DB->.*".*''.*"

如果它在单行上有效,但显然不在我给出的例子中:现在使用SED在多条(n)行上进行匹配

1 个答案:

答案 0 :(得分:1)

find topdir -type f -name '*.php' -exec grep -l "= *''" {} +

grep一次操作一行,因此通过在双引号内查找撇号来匹配您的示例,因为它们位于不同的行上。所以我只是检查= ''

-l选项打印匹配文件的名称,而不是打印匹配的行。