У меня есть куча файлов журналов. Мне нужно выяснить, сколько раз строка встречается во всех файлах.
grep -c string *
возвращается
...
file1:1
file2:0
file3:0
...
Используя канал, я смог получить только те файлы, которые имеют одно или несколько вхождений:
grep -c string * | grep -v :0
...
file4:5
file5:1
file6:2
...
Как я могу получить только комбинированный счет? (Если он вернется file4:5, file5:1, file6:2
, я хочу вернуться 8.)
grep file1 file2 --options
Ответы:
источник
grep -c string<*
так, просто заменив пробел на меньше чем.grep -o
иwc -l
делает. кошка быстрее в случаях, как оригинальный вопрос, хотя.Это работает для нескольких вхождений в строке:
источник
grep -o string * --exclude-dir=some/dir/one/ --exclude-dir=some/dir/two | wc -l
.grep -ioR string * | wc -l
это то, что я использую для поиска безgrep -rc test . | awk -F: '$NF > 0 {x+=$NF; $NF=""; print} END{print "Total:",x}'
будет считать несколько вхождений в строке
источник
grep -oh "... my that curry was strong" * >> wc
:)Вместо того, чтобы использовать -c, просто направьте его в wc -l.
Это перечислит каждое вхождение в одной строке, а затем посчитает количество строк.
Это будет пропускать случаи, когда строка встречается 2+ раза в одной строке.
источник
Одно из редких полезных приложений
cat
.источник
Что-то отличное от всех предыдущих ответов:
источник
Вы можете добавить
-R
к поиску рекурсивно (и избегать использовать cat) и-I
игнорировать двоичные файлы.источник
Обязательное решение AWK:
Будьте осторожны, если ваши имена файлов включают в себя «:».
источник
Решение AWK, которое также обрабатывает имена файлов, включая двоеточия:
Имейте в виду, что этот метод все еще не находит несколько вхождений
string
в одной строке.источник
Если вы хотите количество вхождений в файл (например, для строки "tcp"):
Пример вывода:
Объяснение:
grep -RIci NEEDLE .
- ищет строку NEEDLE рекурсивно из текущего каталога (по символическим ссылкам), игнорируя двоичные файлы, считая количество вхождений, игнорируя регистрawk ...
- эта команда игнорирует файлы с нулевым числом вхождений и форматирует строкиsort -hr
- сортирует строки в обратном порядке по номерам в первом столбцеКонечно, он работает и с другими командами grep с параметром
-c
(count). Например:источник
Вы можете использовать простой,
grep
чтобы эффективно зафиксировать количество вхождений. Я буду использовать-i
опцию, чтобы убедиться,STRING/StrING/string
правильно поймают.Командная строка, которая дает имя файла:
Командная строка, которая удаляет имена файлов и печатает 0, если есть файл без вхождений:
источник
короткий рекурсивный вариант:
источник
Grep единственное решение, которое я тестировал с grep для windows:
Это решение будет подсчитывать все вхождения, даже если их несколько в одной строке.
-r
рекурсивно ищет в каталоге,-o
«покажет только часть строки, соответствующую PATTERN» - это то, что разбивает несколько вхождений на одну строку и заставляет grep печатать каждое совпадение на новой строке; затем передайте эти результаты с разделением на новую строку обратно в grep,-c
чтобы подсчитать количество вхождений, используя тот же шаблон.источник
Вот более быстрый, чем grep AWK альтернативный способ сделать это, который обрабатывает несколько совпадений
<url>
на строку в коллекции файлов XML в каталоге:Это хорошо работает в тех случаях, когда некоторые XML-файлы не имеют разрывов строк.
источник
Другой oneliner, использующий основные функции командной строки, обрабатывающий несколько вхождений на строку.
источник