用于仅识别目录下/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 *
…应该这么做。