Linux三剑客命令之grep

1. 命令介绍

当我们需要在文件中搜索特定文本时,grep 命令就派上了用场。它是全局正则表达式打印 (global regular expression print)的缩写,用于在文件中查找匹配指定模式的行,并将匹配到的行输出到标准输出。

2. 基本用法

grep [options] pattern [file...]

pattern:要搜索的模式,可以是普通字符串或正则表达式

file:要搜索的文件名。如果未提供文件名,则从标准输入读取输入。

参数

-r, --recursive:递归地搜索目录中的文件。

-n, --line-number:显示匹配行的行号。

-i, --ignore-case:忽略大小写。

-f FILE, --file=FILE:从文件或文件列表(以空格分隔)中读取模式,并用于搜索。

-v, --invert-match:显示不匹配模式的行。

-l, --files-with-matches:仅显示包含匹配模式的文件名,而不显示匹配的行。

-c, --count:仅显示匹配的行数,而不是匹配的行本身。

-w, --word-regexp:只匹配整个单词,而不是部分匹配。

-o, --only-matching:仅显示匹配的部分文本,而不是整行文本。

-E, --extended-regexp:使用扩展正则表达式进行匹配。

-F, --fixed-strings:按照字符串字面意义匹配,而不是正则表达式。

-A NUM, --after-context=NUM:显示匹配行以及后面的 NUM 行。

-B NUM, --before-context=NUM:显示匹配行以及前面的 NUM 行。

-C NUM, --context=NUM:显示匹配行以及前后各 NUM 行。

--exclude=GLOB:排除符合指定通配符模式的文件,GLOB 是一个通配符模式。

--exclude-dir=DIR:排除符合指定目录名的目录。

--include=GLOB:只搜索符合指定通配符模式的文件。

-x, --line-regexp:匹配整行,而不是匹配行中的任意部分。

-m NUM, --max-count=NUM:仅显示 NUM 行匹配结果,然后停止搜索。

--color=WHEN:对匹配的文本着色显示。WHEN 可以是 never, always, 或 auto

--binary-files=TYPE:处理二进制文件。TYPE 可以是 binary, text, 或 without-match

示例

1. 在文件中搜索包含 "error" 的行:

grep "error" file.txt

2. 在多个文件中递归搜索包含 "pattern" 的行,并显示行号:

grep -nr "pattern" directory/

3. 搜索时忽略大小写: 

grep -i "pattern" file.txt

4. 显示不匹配模式的行:

grep -v "pattern" file.txt

 5. 显示匹配的行数而不是匹配的行:

grep -c "pattern" file.txt

6. 仅显示包含匹配模式的文件名,而不显示匹配的行:

grep -l "pattern" *.txt

7. 匹配以特定字符串结尾的行:使用 $ 匹配行的结尾。

grep 'end$' file.txt

8. 使用扩展正则表达式进行匹配: 

grep -E "pattern1|pattern2" file.txt

9. 显示匹配行以及后面的 NUM 行: 

grep -A 3 "pattern" file.txt

10. 搜索一个目录下的所有文件,但不想搜索以 .log 结尾的文件:

grep -r --exclude='*.log' "text" /path/to/directory

11. 获取前两个匹配结果:

grep -m 2 "pattern" file.txt

  

3. 实际应用

分析日志

例如我需要在CentOS中查看最近的30个登录失败的IP

运行下面的命令结合tail命令从/var/log/secure日志文件中过滤出"Failed password for invalid user"的行:

grep "Failed password for invalid user" /var/log/secure | tail -n 30

再结合awk命令统计最近30个登录失败的IP及其次数

grep "Failed password for invalid user" /var/log/secure | tail -n 30 | awk '{print $13}' | sort | uniq -c | sort -nr

命令解释

这个命令是一个复杂的管道命令,用于分析 /var/log/secure 文件中最近 30 条包含 "Failed password for invalid user" 的日志条目,并统计出及其出现次数:

  1. grep "Failed password for invalid user" /var/log/secure:首先使用 grep 命令在 /var/log/secure 文件中查找包含字符串 "Failed password for invalid user" 的行。

  2. tail -n 30:然后使用 tail 命令只保留最近的 30 行匹配到的日志条目。

  3. awk '{print $13}':接着使用 awk 命令提取每行中的第 13 列,这一列通常包含登录尝试的IP。

  4. sort:对提取出来的IP进行排序,以便后续的 uniq 命令能够正确统计出现次数。

  5. uniq -c:使用 uniq 命令统计每个IP出现的次数,并添加一个前缀表示出现次数。

  6. sort -nr:最后,对统计结果按照出现次数进行逆序排序,以便显示出现次数最多的IP在最前面。

查找文本 

例如,我需要查看网站配置在哪个nginx配置文件中(配置文件名跟域名不相关的情况下),可以使用grep命令结合-nr参数查找整个nginx目录:

grep -nr domain.com /etc/nginx

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值