2013-12-06 3 views
2

Я хочу считать все $ символов в каждом файле в каталоге с несколькими подкаталогами. Моя цель - подсчитать все переменные в проекте PHP. Файлы имеют суффикс .php.Подсчет числа символов в файлах

Я попытался

grep -r '$' . | wc -c 
grep -r '$' . | wc -l 

и много других вещей, но все вернулись в номер, который не может сравниться. В моем примере файл всего четыре: $. Так что я надеюсь, что кто-то может мне помочь.

EDIT

Мой пример файла

<?php 
class MyClass extends Controller { 

$a;$a; 
$a;$a; 
$a; 
$a; 
+0

Пожалуйста, перефразировать ваш вопрос - каталоги не содержат символы - файлы делают. Вы хотите считать '$' в наборе файлов в каком-то каталоге? –

+0

Что вы хотите сделать точно? Учитывать ли в файле определенные символы? Или имена файлов в каталоге? Ваш заголовок говорит одно, а ваша команда говорит что-то другое. – SuperSaiyan

+0

Я попытался добавить более подробную информацию к вопросу. Но я хочу считать $ s ind набором файлов в некотором директивном – EvilKarter

ответ

4

Чтобы рекурсивно подсчитать количество $ символов в наборе файлов в директории, которую вы могли бы сделать:

fgrep -Rho '$' some_dir | wc -l 

Чтобы включить только файлы расширения .php в рекурсии вы можете вместо этого использовать:

fgrep -Rho --include='*.php' '$' some_dir | wc -l 

-R для рекурсивного обхода файлов в some_dir и -o для согласования части из каждой строки поиска. Набор файлов ограничен шаблоном *.php, и имена файлов не включаются в вывод с -h, что в противном случае могло бы вызвать ложные срабатывания.

+0

Я использовал 'grep -oR" \ $ "* | wc -l', но fgrep - это путь. +1 –

+0

И как я могу сказать, что он должен включать только файлы php? извините, не видел вашего редактирования – EvilKarter

+0

Есть ли способ рассмотреть два знака $ подряд? – EvilKarter

1

Для подсчета переменных в проекте PHP вы можете использовать variable regex, определенный here.

Таким образом, следующий будет 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 команды ..

+0

это отличный материал thx. – EvilKarter

Смежные вопросы