Linux egrep命令介绍
egrep是一个文本处理工具,用于在指定的位置搜索符合模式或正则表达式的文本。它的功能和grep -E相同,但是速度更快。egrep是E xtended G lobal R egular E xpression P rint的缩写,意思是扩展的全局正则表达式打印。egrep可以用于查找文件中的字符串、多个字符串或者复杂的正则表达式,也可以用于过滤文本、统计文本、比较文本等操作。
Linux egrep命令适用的Linux版本
linux egrep命令是GNU grep的一部分,linux egrep命令可以在多数Linux发行版(如Debian、Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora、Raspbian)的主要终端命令解释器(包括bash、zsh、csh、ksh、fish、tcsh)中使用。如果没有安装GNU grep,可以使用以下命令进行安装:
- 在基于Debian的系统中,使用apt-get命令:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install grep
- 在基于Red Hat的系统中,使用yum命令:
[linux@bashcommandnotfound.cn ~]$ sudo yum install grep
- 在基于Arch的系统中,使用pacman命令:
[linux@bashcommandnotfound.cn ~]$ sudo pacman -S grep
Linux egrep命令的基本语法
egrep命令的基本语法如下:
egrep [options] [search_term] [location]
egrep命令至少需要一个搜索词和一个搜索位置。语法中的各个部分是:
- options:修改和指定搜索过程的参数。
- search_term:一个字符串、多个字符串或者一个正则表达式。
- location:一个文件、一个目录或者一个文件的路径,用于进行搜索。
Linux egrep命令的常用选项说明
egrep命令有很多选项,可以用于控制搜索的行为和输出的格式。常用的egrep命令选项如下表所示:
选项 | 说明 |
---|---|
-c | 统计并打印匹配的行数,而不是打印匹配的行。 |
-v | 打印不匹配的行,即反向匹配。 |
-i | 忽略搜索词的大小写。 |
-l | 只打印匹配的文件名,不打印匹配的行号或者其他信息。 |
-L | 只打印不匹配的文件名,与-l选项相反。 |
-e | 允许在搜索词的开头使用‘-’符号。如果不指定,shell会将搜索词作为选项来执行,并返回错误。 |
-w | 只打印包含整个单词的行。单词构成字符是字母、数字和下划线。匹配的子串必须由非单词构成字符分隔。 |
-x | 只打印与整行匹配的字符串。 |
-m NUMBER | 继续搜索匹配,直到匹配的数量达到NUMBER为止。 |
-o | 只打印匹配的部分,而不是整行。 |
-n | 打印每个匹配的行以及相应的行号。对于多个文件,还打印文件名和行号。 |
-r | 在指定的目录及其子目录中递归地搜索搜索词。最后一个参数是要检查的目录。‘.’(点)表示当前目录。 |
-b | 显示匹配在文件中的位置。 |
-B (n) | 打印包含搜索词的行和之前的n行。 |
-A (n) | 打印包含搜索词的行和之后的n行。 |
-C (n) | 打印包含搜索词的行和之前和之后的n行。 |
Linux egrep命令的实例
egrep命令的实例有很多,可以根据不同的需求和场景来使用。以下是一些常见的egrep命令的实例:
- 在文件中搜索一个字符串
# 在my_text文件中搜索man字符串
[linux@bashcommandnotfound.cn ~]$ egrep man my_text
- 在文件中搜索多个字符串
# 在my_text文件中搜索man或woman字符串,使用|符号分隔
[linux@bashcommandnotfound.cn ~]$ egrep 'man|woman' my_text
- 在文件中搜索正则表达式
# 在my_text文件中搜索以a开头,以n结尾的四个字母的单词,使用^和$表示开头和结尾,使用.表示任意字符
[linux@bashcommandnotfound.cn ~]$ egrep '^a..n$' my_text
- 在文件中搜索不区分大小写的字符串
# 在my_text文件中搜索man字符串,忽略大小写,使用-i选项
[linux@bashcommandnotfound.cn ~]$ egrep -i man my_text
- 在文件中搜索不匹配的字符串
# 在my_text文件中搜索不包含man字符串的行,使用-v选项
[linux@bashcommandnotfound.cn ~]$ egrep -v man my_text
- 在文件中搜索整个单词
# 在my_text文件中搜索man作为一个单独的单词,而不是作为其他单词的一部分,使用-w选项
[linux@bashcommandnotfound.cn ~]$ egrep -w man my_text
- 在文件中搜索整行匹配的字符串
# 在my_text文件中搜索只包含man字符串的行,使用-x选项
[linux@bashcommandnotfound.cn ~]$ egrep -x man my_text
- 在文件中搜索匹配的次数
# 在my_text文件中统计man字符串出现的次数,使用-c选项
[linux@bashcommandnotfound.cn ~]$ egrep -c man my_text
- 在文件中搜索匹配的位置
# 在my_text文件中显示man字符串在文件中的位置,使用-b选项
[linux@bashcommandnotfound.cn ~]$ egrep -b man my_text
- 在文件中搜索匹配的上下文
# 在my_text文件中显示man字符串以及之前的两行和之后的三行,使用-B和-A选项
[linux@bashcommandnotfound.cn ~]$ egrep -B 2 -A 3 man my_text
- 在文件中搜索匹配的部分
# 在my_text文件中只显示man字符串,而不是整行,使用-o选项
[linux@bashcommandnotfound.cn ~]$ egrep -o man my_text
- 在文件中搜索匹配的行号
# 在my_text文件中显示man字符串所在的行号,使用-n选项
[linux@bashcommandnotfound.cn ~]$ egrep -n man my_text
- 在目录中递归地搜索匹配的文件
# 在当前目录及其子目录中搜索包含man字符串的文件,使用-r选项
[linux@bashcommandnotfound.cn ~]$ egrep -r man .
- 在多个文件中搜索匹配的文件名
# 在file1和file2中搜索包含man字符串的文件名,使用-l选项
[linux@bashcommandnotfound.cn ~]$ egrep -l man file1 file2
- 在多个文件中搜索不匹配的文件名
# 在file1和file2中搜索不包含man字符串的文件名,使用-L选项
[linux@bashcommandnotfound.cn ~]$ egrep -L man file1 file2
Linux egrep命令的注意事项
- egrep命令是区分大小写的,除非使用-i选项。
- egrep命令默认将?,+,|等符号作为元字符,如果要匹配这些符号本身,需要使用反斜杠转义。
- egrep命令如果包含空格或者特殊字符,需要用单引号或者双引号括起来,否则会被shell解释为多个参数。
- egrep命令的正则表达式和其他工具或语言的正则表达式可能有些差异,需要注意区分。
- egrep命令的搜索词如果是中文,需要使用UTF-8编码的文件,否则可能出现乱码或者无法匹配的情况。
评论区