shell语法 06-Linux文本处理-grep

  • grep命令在一个或多个文件中查找某个字符模式。
  • 如果这个模式中包含空格,就必须用引号把它括起来。
grep Tom /etc/passwd
  • grep 将在文件中查找/etc/passwd 中查找模式 Tom。
  • 结果如下:
    • 查找成功,文件中相应行会显在屏幕上
    • 没有找到指定的模式,就不会有任何输出
    • 指定的文件不是一个合法的文件,屏幕上就会显示报错信息
    • 发现了要查找的模式, grep 就返回退出状态 0,表示成功,
    • 没找到要查找的模式,返回的退出状态为 1,
    • 找不到指定文件时,退出状态将是 2。
ps -ef | grep root
  • ps 命令的输出被送到 grep,然后所有包含 root 的行都被打印在屏幕上。

grep选项

选 项 功 能
-E 如果加这个选项,那么后面的匹配模式就是扩展的正则表达式,也就是 grep -E = egrep
-i 比较字符时忽略大小写区别
-w 把表达式作为词来查找, 相当于正则中的"<...>"(...表示你自定义的规则)
-x 被匹配到的内容,正好是整个行,相当于正则"^...$"
-v 取反,也就是输出我们定义模式相反的内容
-c count.统计,统计匹配结果的行数,主要不是匹配结果的次数,是行数。
-m 只匹配规定的行数,之后的内容就不在匹配了
-n 在输出的结果里显示行号,这里要清楚的是这里所谓的行号是该行内容在原文件中的行号,而不是在输出结果中行号
-o 只显示匹配内容, grep 默认是显示满足匹配条件的一行,加上这个参数就只显示匹配结果,比如我们要匹配一个 ip 地址,就只需要结果,而不需要该行的内容。
-R 递归匹配。如果要在一个目录中多个文件或目录匹配内容,则需要这个参数
-B 输出满足条件行的前几行,比如 grep -B 3 "aa" file 表示在 file 中输出有 aa 的行,同时还要输出 aa 的前 3 行
-A 这个与-B 类似,输出满足条件行的后几行
-C 这个相当于同时用-B -A,也就是前后都输出

例子

显示包含#的行,并在前面添加行数
 grep -n '#' /etc/ssh/sshd_config
显示包含#的行,并关闭大小写敏感性
grep -i '#' /etc/ssh/sshd_config
显示sshd配置文件,排除空行和以#号开头的
cat /etc/ssh/sshd_config |grep -v '^$' |grep -v '^#'
显示包含s内容的所有文件名
grep -l 's' /etc/ssh/*
统计包含有#的行数
grep -c '#' /etc/ssh/sshd_config
只显示包含Port词的行
 grep -w 'Port' /etc/ssh/sshd_config
原文地址:https://www.cnblogs.com/liangjingfu/p/9419455.html