Какая отдельная команда используется для определения только количества совпадений во всех строках внутри файлов в /etc
каталоге, содержащих слово «HOST»?
Мне следует перечислить только файлы с совпадениями и скрыть любые сообщения об ошибках.
решение1
Чтобы подсчитать совпадения, перечислить только имена файлов и количество:
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
Чтобы получить больше информации.
решение2
Это не одна команда, а одна строка.
что-то вроде
grep -r ',,HOST' . | wc -l
решение3
Вопрос сформулирован немного странно. Сначала он спрашивает количество строк, которые совпадают во всех файлах, затем он хочет, чтобы вы перечислили имена файлов.
Чтобы подсчитать совпадающие строки во всех файлах:
grep -R "ХОСТ" /etc 2> /dev/null | wc -l
Чтобы вывести список имен файлов:
grep -Rl "ХОСТ" /etc 2> /dev/null
решение4
grep -c HOST *
… следует это сделать.