搜索三兄弟 grep、egrep 和 fgrep

在这里插入图片描述

一、grep、egrep 和 fgrep 各自特点

命令是否支持正则支持正则类型
grep基本正则表达式
egrep扩展正则表达式
fgrep×不支持

二、grep命令 – 强大的文本搜索工具

1. grep简介:
grep是“global search regular expression and print out the line”的简称,意思是全面搜索正则表达式,并将其打印出来。这个命令可以结合正则表达式使用,它也是linux使用最为广泛的命令。

grep命令的选项用于对搜索过程的补充,而其命令的模式十分灵活,可以是变量、字符串、正则表达式。需要注意的是:当模式中包含了空格,务必要用双引号将其引起来。
2. 语法格式: grep [参数]
3. 常用参数:

参数含义
-i搜索时,忽略大小写
-c只输出匹配行的数量
-l只列出符合匹配的文件名,不列出具体的匹配行
-n列出所有的匹配行,显示行号
-h查询多文件时不显示文件名
-s不显示不存在、没有匹配文本的错误信息
-v显示不包含匹配文本的所有行
-w匹配整词
-x匹配整行
-r递归搜索
-q禁止输出任何结果,已退出状态表示搜索是否成功
-b打印匹配行距文件头部的偏移量,以字节为单位
-o与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位
–color高亮显示查找的字符
  1. 应用实例:
  • 正向匹配:高亮显示我们要查找的字符,并显示行数
    grep -n --color "root" /etc/passwd

在这里插入图片描述

  • 反向匹配:在/etc/passwd下面查找不包含root和的条目,写到./test.text文件中
    grep -v root /etc/passwd > ./test.text
  • 按词匹配:精确匹配/etc/passwd 文件中的含bin行
grep 'bin' /etc/passwd #非精确匹配
grep '\<bin\>' /etc/passwd #精确匹配

在这里插入图片描述

  • grep处理多文件:查找当前目录下所有包含a的文件
grep -l 'a' * #显示包含a的文件 
grep -L 'a' * #显示不包含a 的文件

在这里插入图片描述
-正则:行首行未匹配的表示

# ^表示行首
# $表示行未
grep '^root' /etc/passwd
grep 'bash$' /etc/passwd

在这里插入图片描述

三、egrep命令 – 在文件内查找指定的字符串

  1. egrep命令简介:
  • egrep命令作用是在文件内查找指定的字符串。
  • egrep执行效果与grep -E相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。
  1. 语法格式:egrep [参数] [文件]
  2. 参数同grep的使用
  3. grep和egrep区别:
  • grep之下不支持 ? 与 + 这两种modifier, 但egrep可以。
  • grep不支持 a|b 或 (abc|xyz) 这类”或一”比对, 但egrep可以。
  • grep在处理 {n,m} 时, 需用 { 与 } 处理, 但egrep则不需要。
  1. 应用实例:
  • 显示root 或 ftp开头的行和显示bash结尾的行,并显示行数
egrep -n '^root|^ftp|bash$' /etc/passwd
grep -E -n  '^root|^ftp|bash$' /etc/passwd 

在这里插入图片描述

四、fgrep命令– 为文件搜索文字字符串

  1. fgrep命令简介:
    fgrep命令的作用是用来搜索file参数指定的输入文件(缺省为标准输入)中的匹配模式的行。fgrep 命令特别搜索Pattern参数,它们是固定的字符串。如果在File 参数中指定一个以上的文件fgrep命令将显示包含匹配行的文件。
    fgrep命令 作用与grep和egrep命令不同,因为它搜索字符串而不是搜索匹配表达式的模式。fgrep命令使用快速的压缩算法。$, *, [, |, (, )和\等字符串被fgrep命令按字面意思解释。这些字符并不解释为正则表达式。

如果没有指定文件,fgrep命令假定标准输入。一般,找到的每行都复制到标准输出中去。如果不止一个输入文件,则在找到的每行前打印文件名。

fgrep相关属性:

  • fgrep 命令和带 -F 标志的 grep命令是一样的但出错和用法消息不同-s 标志功能也不同。
  • 每行限制在 2048 个字节。
  • 段落(-p 标志下)目前限制在5000个字符的长度。
  • 不要在特定的文件中运行 grep 命令,因为会产生不可预料的结果。
  • 输入行不能包含空字符。
  • 输入文件应该以换行字符结尾。
  • 虽然可以同时指定很多标志,但某些标志会覆盖其余的标志。例如,如果同时指定 -l 和 -n ,只有文件名写入到标准输出中去。
    2. 语法格式: fgrep [参数]
    3. 常用参数:
参数含义
-b在找到的每行之前添加行所在的块编号
-c仅显示匹配行的计数
-e指定模式
-f指定包含字符串的文件
-h当多个文件被处理时隐藏文件名
-i当进行比较时忽略字母的大小写
-l只列出包含匹配行的文件名(一次)
n将文件中每行的相对行号置于行前
-p Separator显示包含匹配行的整个段落
-q禁止所有写入到标准输出的操作,不管是否为匹配行
-s仅显示出错消息
-v显示除了匹配特定模式的行以外的所有行
-w执行单词搜索
-x显示匹配模式的行,要求无额外的字符
-y当进行比较时忽略字符的大小写
  1. 应用实例:
  • 匹配文件中^this的部分
 grep '\^this' 1.text
 fgrep -n '^this' 1.text

在这里插入图片描述

  • 匹配所有含root的行
    cat /etc/passwd | fgrep root
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页