2

Какая команда используется для определения только количества совпадений всех строк в файлах в каталоге /etc которые содержат слово "HOST"?

Я должен перечислить только файлы с совпадениями и подавить любые сообщения об ошибках.

4 ответа4

7

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

grep -src HOST /etc/*

Пример вывода:

/etc/postfix/postfix-files:1
/etc/security/pam_env.conf:6
/etc/X11/app-defaults/Ddd.3.3.11:1
/etc/X11/app-defaults/Ddd:1
/etc/zsh/zshrc:0
/etc/zsh/zshenv:0

Опция -c подавляет нормальный вывод и печатает счетчик совпадений для каждого файла.

Если вы хотите подавить файлы с нулевым счетом:

grep -src HOST /etc/* | grep -v ':0$'

Чтобы напечатать номер строки (-n) и имя файла (-H) для каждой подходящей строки для любого количества входных файлов:

grep -srnH HOST /etc/*

Пример вывода:

/etc/lynx-cur/lynx.cfg:254:.h2 LYNX_HOST_NAME
/etc/lynx-cur/lynx.cfg:255:# If LYNX_HOST_NAME is defined here or in userdefs.h, it will be
/etc/X11/app-defaults/Ddd.3.3.11:8005:    DDD 3.3.11 (@THEHOST@) gets @CAUSE@\n\
/etc/X11/app-defaults/Ddd:8010:    DDD 3.3.12 (@THEHOST@) gets @CAUSE@\n\

Опция -r заставляет grep рекурсивно искать файлы в каждом подкаталоге на всех уровнях в указанном каталоге. Опция -s подавляет сообщения об ошибках.

Чтобы подавить совпадения двоичных файлов, используйте параметр -I .

Смотрите man grep для получения дополнительной информации.

1

Это не одна команда, но это одна строка

что-то вроде

 grep -r ',,HOST' . | wc -l
1
grep -c HOST *

... должен сделать это.

1

Вопрос сформулирован немного странно. Сначала он запрашивает количество строк, которые совпадают во всех файлах, затем он хочет, чтобы вы перечислили имена файлов.

Для подсчета совпадающих строк во всех файлах:

grep -R "HOST" /etc 2> /dev/null | wc -l

Чтобы перечислить имена файлов:

grep -Rl "HOST" /etc 2> /dev/null

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .