在特定目录结构上进行 Grep

在特定目录结构上进行 Grep

我想要实现的目标:

在属于此目录结构的\b\$\w+所有文件中搜索正则表达式:.php

foo/templates/*.php
bar/templates/*.php
<something>/templates/*.php

编辑:我应该说明一下,我的更高层次的目标是在文件中找到唯一的 PHP 变量

我尝试过的:

grep '\b\$\w+' **/templates/*.php
grep '\b\$\w+' */templates/*.php
grep '\b\$\w+' **/templates/**.php

它们似乎都没有产生预期的结果。执行此操作的正确语法是什么?

此外,如果可能的话,最好进行“分组”或“选择不同”(例如,$_GET即使文件中有 180 个实例,也只会显示一次)。


我已经阅读过这些答案,它们促使我尝试了上述命令:

答案1

尝试:

grep -oE '\$\w+' */templates/*.php | sort -u

笔记:

  • -o选项指示仅打印行的匹配部分,而不是整行。这应该会为您提供所有-style 变量grep的名称。$

  • sort -u排序并删除重复项,以便每个变量名称只在输出中出现一次。

  • \w您使用的构造需要扩展正则表达式。因此,添加了该选项-E

  • 这里使用 来\b作为单词边界是有问题的,因为$不是一个有效的“单词”字符,因此不会像\b人们所理解的那样开始一个单词。因此,\b仅当单词恰好在 之前结束时才会匹配,$a$b. 并未a $b\b上面的代码中删除。

相关内容