Linux文本搜索工具grep

Linux文本搜索工具grep



简介

grep(全称Globally search a Regular Expression and Print,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,根据用户指定的“模式(pattern)”对目标文本进行匹配检查,打印匹配到的行。

 家族成员: 
  grep:支持基本正则表达式 
  egrep:相当于grep -E,支持扩展正则表达式 
  fgrep:相当于grep -F,不支持正则表达式


主要参数及使用

grep

格式: grep [OPTIONS] PATTERN [FILE…]

常用选项: 
–color=auto:对匹配的文本着色显示 
注: CentOS 7默认设置该参数。

-v:显示不能被pattern匹配到的行

# cat test
how are you?
hellow
# grep -v are test
hellow

提示:如test文件内容发生改变,会用cat命令将其展示,反之则表示内容不变

-i:忽略字符大小写

# cat test
how are you?
HOW ARE YOU?
# grep are test
how are you?
# grep ARE test
HOW ARE YOU?
# grep -i are test
how are you?
HOW ARE YOU?

-o:仅显示匹配到的字符串

# cat test
how are you?
# grep -o are test
are

-q:静默模式,不输出任何信息 
 静默模式下不会输出任何信息,命令的执行结果可以通过echo $?查询。

# cat test
name
# grep -q name test
# echo $?
0
# grep -q what test
# echo $?
1

-A #:显示匹配的后#行信息

# cat test
how are you?
HOW ARE YOU?
hello
# grep -A 1 ARE test
HOW ARE YOU?
hello

-B #:显示匹配的前#行信息

# grep -B 1 ARE test
how are you?
HOW ARE YOU?

-C #:显示匹配的前后各#行信息

# grep -C 1 ARE test
how are you?
HOW ARE YOU?
hello

基本正则表达式

正则表达式由普通字符和元字符组成。普通字符包括大小写字母和数字,而元字符则具有特殊意义,接下来将对元字符进行介绍。

  • 字符匹配:

.:匹配任意单个字符 
Linux文本搜索工具grep

[]:匹配指定范围内任意单个字符 
Linux文本搜索工具grep

[^]:匹配指定范围外任意单个字符 
Linux文本搜索工具grep 
专用字符集合: 
[:digit:]:任意数字,相当于0-9 
[:lower:]:任意小写字母 
[:upper:]:任意大写字母 
[:alpha:]:任意大小写字母 
[:alnum:]:任意数字或字母 
[:space:]:空格 
[:punct:]:标点符号

  • 匹配次数: 
    用在要指定次数的字符后面,用于指定前面的字符要出现的次数

*:匹配前面字符任意次 
Linux文本搜索工具grep 
注:a*c筛选的是含有c的行,a*是指a可以出现任意次也可没有。

.*:匹配任意长度的任意字符(.为任意字符 *为任意次数) 
Linux文本搜索工具grep

\?:匹配其前面的字符0或1次,即前面的可有可无 
Linux文本搜索工具grep

\+:匹配其前面的字符至少1次 
Linux文本搜索工具grep

\{m\}:匹配前面的字符m次 
Linux文本搜索工具grep

\{m,n\}:匹配前面的字符至少m次,至多n次 
Linux文本搜索工具grep 
\{0,n\}:匹配前面的字符至多n次 
\{m,\}:匹配前面的字符至少m次

  • 位置锚定:

^:行首锚定,用于模式的最左侧 
Linux文本搜索工具grep

$:行尾锚定,用于模式的最右侧 
Linux文本搜索工具grep

^PATTERN$:用模式匹配整行 
Linux文本搜索工具grep

^$:匹配空行,主要配合-v取反消除空行

^[[:space:]]*$:在^$匹配不到的时候使用

\<\b:词首锚定,用于单词模式的左侧 
Linux文本搜索工具grep

\>\b:词尾锚定,用于单词模式的右侧 
Linux文本搜索工具grep

\<PATTERN\>:匹配整个单词 
Linux文本搜索工具grep

  • 分组:

\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理 
Linux文本搜索工具grep

当我们想后续内容与前面模式匹配到的一样,则需要使用到引用也称后向引用。 
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身 
Linux文本搜索工具grep

注:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, … 
\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符 
例: (ab+(xy)*) 
  \1: ab+(xy)* 
  \2: xy


egrep

egrep=grep -E 
格式:egrep [OPTIONS] PATTERN [FILE…] 
常用选项与grep相同

扩展正则表达式

相对于基本正则表达式而言扩展正则表达式在某些参数上可以不使用转义符(\),在使用方式上并没有区别

接下来将介绍扩展正则表达式与基本正则表达式不同的地方,相同点不再累述

  • 次数匹配

?:匹配其前面的字符0或1次,即前面的可有可无 
+:匹配其前面的字符至少1次 
{m}:匹配前面的字符m次 
{m,n}:匹配前面的字符至少m次,至多n次

  • 分组

():将一个或多个字符捆绑在一起,当作一个整体进行处理

  • 或者

基本正则表达式可以使用\|代表或者 

a|b:a或者b 
C|cat:C或cat 
(C|c)at:Cat或cat


fgrep

fgrep不支持正则表达式,表达式仅作普通字符处理

fgrep=grep -F

原创文章,作者:Net18-海滨,如若转载,请注明出处:http://www.178linux.com/13872

(0)
Net18-海滨Net18-海滨
上一篇 2016-04-05 22:55
下一篇 2016-04-05 22:59

相关推荐

  • LINUX命令帮助

    命令帮助 在维护和使用Linux系统时,常常会遇到忘记命令的使用方法,遇到一个比较陌生的命令,又或者想知道这个命令是什么的情况可以查看命令使用帮助。 LINUX命令使用帮助可参考:程序自身的帮助文档、官方文档、官方站点、LINUX的发行版官方文档、其他网站或者搜索引擎 LINUX命令分为内部命令(shell内置的命令)和外部命令,内部命令和外部命令…

    Linux干货 2017-05-28
  • 网络基础

    计算机网络     计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 1、网络通信设备     网络通信设备种类繁多,且日新月异,网络通信设备通常由网络线缆、网卡、集线器、中继器、网桥、交换机、路由器等组成。 网桥(Bri…

    Linux干货 2016-12-16
  • 第九周 N21 总有刁民想害朕

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash nologinuser=$(awk -F : '$NF~/\/nologin$/ {print $7}&…

    Linux干货 2016-09-26
  • Linux 第二天: (07月22日) 练习和作业

    Linux 第二天: (07月22日) 练习和作业         echo 显示闪烁, 下划线, 彩色, 倒三角形 ******* *****  ***   *   #!/bin/bash read -p "Input line number: "…

    Linux干货 2016-08-08
  • 探索这个“男人”

    一、前言 正所谓了解一个命令就得了解他的用法,正好是要了解一个人就得了解他的兴趣爱好,处事态度以及为人是怎么样的。 二、man是什么 man – an interface to the on-line reference manuals Man是manual(手册)的缩写,使用权限是所有用户,man命令提供为linux系统在线提供了很好的帮助手册…

    Linux干货 2016-05-03
  • Linux之网络的风采——以后也能做网管了

    理论基础 1、先说说这个IP:     IP是一种协议,计算机与计算机通信协议,是一种底层通信协议,分为IPv4与IPv6,现在使用的还是IPv4     IPv4由32位二进制组成,也就是由32位0或者1组成,通过排列组合也能算出来这个世界一共有多少个IP了,有2^32个IP约42.9亿个IP,但是据说现在地球人口已…

    2017-03-26

评论列表(3条)

  • stanley
    stanley 2016-04-05 22:57

    赞。详细有料

  • twoyang
    twoyang 2016-04-07 20:45

    基本正则表达式是支持\|的。

  • Net18-海滨
    Net18-海滨 2016-04-08 12:07

    修正:基本正则表达式可使用\|来代表或者,并非不支持,感谢twoyang提醒。