我正在检查PHP文件,看看它们的构造函数是否与类名同名。类的名称是未知的,直到“class”后面的单词被捕获。例如:'class fooBar'将有一个匹配的'function fooBar',但是,可能不是同一种情况,例如:'function foobar'。我尝试了各种工具和管道,但发现在为变量赋值时,获取“class”后面的单词以搜索“function match”是有问题的。我现在所做的就是简单地循环所有的.php文件,并grepping 'class '。结果应该是一个文件路径的列表,这些路径已经成功匹配了'class fooBar'和函数fooBar。
find . -type f -name '*.php' -print0 | xargs -0 grep 'class ' | awk <magic goes here>
2条答案
按热度按时间vecaoik11#
至少可以尝试这样做,使用任何awk,并假设你想在所有文件中匹配class-function,而不仅仅是在一个文件中:
如果你真的希望比较不区分大小写,那么改变:
functions[$2]
到functions[tolower($2)]
name in functions
至tolower(name) in functions
functions[name]
至functions[tolower(name)]
因此比较是不区分大小写的,但输出显示原始的大小写混合类名。
以上假设名称与每个输入文件中的函数或类在同一行上,即你从来没有:
或
alen0pnh2#
如果你可以使用GNU
sed
,并且你的php文件不包含NUL字符,并且函数声明总是在类声明之后,并且没有字符串,注解或其他元素看起来像类或函数声明,而它们不是:诀窍在于
sed
的-z
选项,它可以一次搜索整个文件,并允许像搜索单行文本一样搜索它。