Рекурсивный Grep и количество

На форуме MSDN есть похожий, но упрощенный вопрос об этом, который говорит:

По умолчанию | DataDirectory | указывает на папку вашего приложения (как вы выяснили в исходном вопросе: на App_Data).

Так как это просто путь замещения к вашей базе данных, вы можете сами определить путь с помощью AppDomain.SetData .

11
задан Codex73 19 May 2009 в 19:38
поделиться

6 ответов

У меня работает (он получает общее количество «строк здесь», найденных в каждом файле). Однако он не отображает общую сумму для ВСЕХ найденных файлов. Вот как вы можете это получить:

grep -c -r 'string' file > out && \
    awk -F : '{total += $2} END { print "Total:", total }' out

Список будет входящим, а общая сумма будет отправлена ​​в STDOUT.

Вот результат в дереве каталогов Python2.5.4:

grep -c -r 'import' Python-2.5.4/ > out && \
    awk -F : '{total += $2} END { print "Total:", total }' out
Total: 11500

$ head out
Python-2.5.4/Python/import.c:155
Python-2.5.4/Python/thread.o:0
Python-2.5.4/Python/pyarena.c:0
Python-2.5.4/Python/getargs.c:0
Python-2.5.4/Python/thread_solaris.h:0
Python-2.5.4/Python/dup2.c:0
Python-2.5.4/Python/getplatform.c:0
Python-2.5.4/Python/frozenmain.c:0
Python-2.5.4/Python/pyfpe.c:0
Python-2.5.4/Python/getmtime.c:0

Если вы просто хотите получить строки с вхождениями 'string' измените на следующее:

grep -c -r 'import' Python-2.5.4/ | \
    awk -F : '{total += $2; print $1, $2} END { print "Total:", total }'

Будет выведено:

[... snipped]
Python-2.5.4/Lib/dis.py 4
Python-2.5.4/Lib/mhlib.py 10
Python-2.5.4/Lib/decimal.py 8
Python-2.5.4/Lib/new.py 6
Python-2.5.4/Lib/stringold.py 3
Total: 11500

Вы можете изменить способ печати файлов ($ 1) и счетчика на файл ($ 2).

9
ответ дан 3 December 2019 в 04:53
поделиться

Используя подстановку процесса Bash, это дает то, что я считаю желаемым? (Пожалуйста, поясните вопрос, если это не так.)

grep -r "string here" * | tee >(wc -l)

Это запускает grep -r в обычном режиме, при этом вывод идет как на стандартный вывод, так и на процесс wc -l .

10
ответ дан 3 December 2019 в 04:53
поделиться

Некоторые решения с AWK:

grep -r "string here" * | awk 'END { print NR } 1'

Следующее - общее количество, количество файлы и количество совпадений для каждого из них, отображая первое совпадение каждого из них (для отображения всех совпадений измените условие на ++ f [$ 1] ):

grep -r "string here" * | 
    awk -F: 'END { print "\nmatches: ", NR, "files: ", length(f); 
                   for (i in f) print i, f[i] } !f[$1]++'

Вывод для первого решения (поиск в каталоге для « boost :: ». Я вручную вырезал слишком длинные строки, чтобы они умещались по горизонтали):

list_inserter.hpp:            return range( boost::begin(r), boost::end(r) );
list_of.hpp:            ::boost::is_array<T>,
list_of.hpp:            ::boost::decay<const T>,
list_of.hpp:            ::boost::decay<T> >::type type;
list_of.hpp:        return ::boost::iterator_range_detail::equal( l, r );
list_of.hpp:        return ::boost::iterator_range_detail::less_than( l, r );
list_of.hpp:        return ::boost::iterator_range_detail::less_than( l, r );
list_of.hpp:        return Os << ::boost::make_iterator_range( r.begin(), r.end() );
list_of.hpp:            return range( boost::begin(r), boost::end(r) );
list_of.hpp:            return range( boost::begin(r), boost::end(r) );
list_of.hpp:            return range( boost::begin(r), boost::end(r) );
ptr_list_of.hpp:                          BOOST_DEDUCED_TYPENAME boost::ptr_...
ptr_list_of.hpp:        typedef boost::ptr_vector<T>       impl_type;
13

Вывод для второго

list_inserter.hpp:            return range( boost::begin(r), boost::end(r) );
list_of.hpp:            ::boost::is_array<T>,
ptr_list_of.hpp:                          BOOST_DEDUCED_TYPENAME boost::ptr_...

matches:  13 files:  3
ptr_list_of.hpp 2
list_of.hpp 10
list_inserter.hpp 1

Цвета в результате хорошие ( --color = always для grep), но они ломаются при передаче через awk здесь. Так что лучше не включайте их, если вы не хотите, чтобы после этого весь ваш терминал был окрашен :) Ура!

2
ответ дан 3 December 2019 в 04:53
поделиться

Я бы попробовал комбинацию find и grep.

find . | xargs grep -c "string here"

В любом случае, grep -c -r "строка здесь" * работает у меня (Mac OS X).

1
ответ дан 3 December 2019 в 04:53
поделиться

Чтобы вывести только имена файлов с совпадениями, используйте:

grep -r -l "your string here" .

Будет выведена одна строка с именем файла для каждого файла, который соответствует искомому выражению.

0
ответ дан 3 December 2019 в 04:53
поделиться
grep -rc "my string" ./ | grep :[1-9] >> file_name_by_count.txt

Работает как шарм.

1
ответ дан 3 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: