Кількість файлів, що містять заданий рядок


Відповіді:


30

grep -l "string" * | wc -l буде шукати "рядок" у вмісті всіх файлів у робочому каталозі та повідомляє, скільки збігається.


1
Це не спрацює, якщо в каталозі багато файлів, воно викине помилку "zsh: список аргументів занадто довгий: grep". Будь-які ідеї, як від цього позбутися?

1
@ user16142 grep каталог замість файлів: grep -lr "string" directory | wc -lЯкщо ви не хочете рекурсивного пошуку, ви можете використовувати параметр find з maxdepth: find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -lЗверніть увагу, що цей другий варіант повільніше, ніж grep.
Агаргара

9

greps параметр -lбуде виводити тільки ті імена файлів, які відповідають $PATTERN, wcїх можна буде потім рахувати.

grep -l "$PATTERN" * | wc -l

дякую, але цікаво було з малюнком у файлі ... вибачте за неоднозначне запитання

Якщо так, візьміть відповідь Вовка.
віх

3
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *

Уточнення. Це шукає кількість файлів, які містять "pattern_to_look_for" у своєму вмісті, а не у їхніх іменах (як відповідь Вага). З вашого запитання важко сказати, що ви шукаєте.


Але чогось не вистачає? тому що це не працює

Якщо ви шукаєте рядок качки, ви повинні написати це як / duck / in Awk. Ти це робиш?
Ян Перссон

так, вихід: awk: помилка читання (Є каталог)

Відповідь Вовка дасть вам дублікати. Якщо в одному з файлів є кілька записів рядка, який ви шукаєте, він вважатиметься додатковим збігом.
Ян Перссон

Добре, якщо у вас є каталоги в папці, ви повинні зробити додаткові речі, такі як заміна зірки на щось подібне find . ! -name . -prune -type f(не пропустіть зворотних посилань). Ця команда перераховує лише файли в папці.
Ян Перссон

2

Це працює в Bash з будь-яким ім'ям файлу:

grep -lZ "$pattern" * | tr -cd '\000' | wc -c

Пояснення:

  • grep's -Z опція друкує кожен результат з ␀-байтового сепаратора. Цей символ не може бути частиною імені файлу, тому ми можемо просто порахувати кількість роздільників, щоб отримати кількість файлів.
  • Щоб позбутися від інших символів у висновку, ми просто видаляємо все, окрім ␀ байтів tr.
  • Потім просто порахуйте символів wc.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.