我想统计一个目录中的每个文件中的所有$
字符与几个子目录。 我的目标是计算一个PHP项目中的所有variables。 这些文件有后缀.php
。
我试过了
grep -r '$' . | wc -c grep -r '$' . | wc -l
和很多其他的东西,但都返回了一个不匹配的数字。 在我的示例文件中只有四个$
。 所以我希望有人能帮助我。
编辑
我的示例文件
<?php class MyClass extends Controller { $a;$a; $a;$a; $a; $a;
要递归计算目录中一组文件中$
字符的数量,您可以:
fgrep -Rho '$' some_dir | wc -l
要在递归中只包含扩展名为.php
,你可以使用:
fgrep -Rho --include='*.php' '$' some_dir | wc -l
-R
用于递归遍历some_dir
的文件, -o
用于匹配每行搜索的部分。 这组文件被限制为模式*.php
并且文件名不包含在带有-h
的输出中,否则可能会导致误报。
为了计算PHP项目中的变量,你可以使用这里定义的variable regex
。
所以,下一个会grep每个文件的所有变量:
cd ~/my/php/project grep -Pro '\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' . -P - use perlish regex -r - recursive -o - each match on separate line
会产生像这样的东西:
./elFinderVolumeLocalFileSystem.class.php:$path ./elFinderVolumeLocalFileSystem.class.php:$path ./elFinderVolumeMySQL.class.php:$driverId ./elFinderVolumeMySQL.class.php:$db ./elFinderVolumeMySQL.class.php:$tbf
你要数他们,所以你可以使用:
$ grep -Proc '\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' .
并会得到count of variables in each file
,如:
./connector.minimal.php:9 ./connector.php:9 ./elFinder.class.php:437 ./elFinderConnector.class.php:46 ./elFinderVolumeDriver.class.php:1343 ./elFinderVolumeFTP.class.php:577 ./elFinderVolumeFTPIIS.class.php:63 ./elFinderVolumeLocalFileSystem.class.php:279 ./elFinderVolumeMySQL.class.php:335 ./mime.types:0 ./MySQLStorage.sql:0
当需要by file and by variable
计数时,可以使用:
$ grep -Pro '\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' . | sort | uniq -c
为了得到如下结果:
17 ./elFinderVolumeLocalFileSystem.class.php:$target 8 ./elFinderVolumeLocalFileSystem.class.php:$targetDir 3 ./elFinderVolumeLocalFileSystem.class.php:$test 97 ./elFinderVolumeLocalFileSystem.class.php:$this 1 ./elFinderVolumeLocalFileSystem.class.php:$write 6 ./elFinderVolumeMySQL.class.php:$arc 3 ./elFinderVolumeMySQL.class.php:$bg 10 ./elFinderVolumeMySQL.class.php:$content 1 ./elFinderVolumeMySQL.class.php:$crop
在这里你可以看到,变量$write
只被使用一次,所以(也许)它是无用的。
您也可以对per variable per whole project
计数
$ grep -Proh '\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' . | sort | uniq -c
并会得到像这样的东西:
13 $tree 1 $treeDeep 3 $trg 3 $trgfp 10 $ts 6 $tstat 35 $type
在那里你可以看到,比$treeDeep
在整个项目中只使用一次,所以它肯定是没用的。
您可以使用不同的grep
, sort
和uniq
命令来实现许多其他组合。