关于grep的使用以及正则表达式

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

    简单地说,正则表达式就是处理字符串的方法,它以行为单位来进行字符串的处理行为,通过一些特殊的符号的辅助,可以让用户轻易打到查找、删除、替换某特定字符串的处理程序。这些特殊字符称为元字符,其不表示字符本身的意义,用于额外功能性的描述。正则表达式又分为基础正则与扩展正则。

    1)基础正则表达式

元字符: 

        .: 匹配任意单个字符

        [char]: 匹配指定范围内的任意单个字符

        [^char]:匹配指定范围外的任意单个字符

        字符集合: [:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:],[:alnum:]

匹配次数(贪婪模式):

        *: 匹配其前面的字符任意次    \+:匹配其前面的字符至少一次

        .*: 任意长度的任意字符       \?: 匹配其前面的字符1次或0次

        \{m,n\}:匹配其前面的字符至少m次,至多n次

    位置锚定:指定字符出现位置

^: 锚定行首,此字符后面的任意内容必须出现在行首

 $: 锚定行尾,此字符前面的任意内容必须出现在行尾

 ^$: 空白行

\<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现

\>或\b: 锚定词尾,其前面的任意字符必须作为单词尾部出现

分组:

        \( \)    如:\(ab\)*,将ab最为一个整体匹配

        \n:后向引用,引用前面的第n个左括号以及与之对应的右括号中的模式所匹配到的内容

      2)扩展正则表达式  

     扩展正则表达式,与基本正则表达式的不同在于其不再需要转译,增加了“|”这个命令。这里仅介绍其不同之处。      

 +: 匹配其前面的字符至少1次

?: 匹配其前面的字符1次或0次

{m,n}:匹配其前面的字符至少m次,至多n次

        ():   分组 

        a|b:  a或者b

 二、grep的使用

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;其基本格式为

                              grep [OPTIONS] PATTERN [FILE...]

     [OPTIONS]: 其主要选项有        

-i:忽略大小写--color=auto: 对匹配到的文本着色显示;

-v:显示没有被模式匹配到的行    -o:只显示被模式匹配到的字符串

 -E:使用扩展正则表达式          -q: 静默模式,不输出任何信息;

-A #:after, 后#行             -B #: before, 前#行

-C #:context, 前后各#行

           PATTERN由正则表达式字符及文本字符所编写的过滤条件

    由于grep同胞的另外两个命令,egrep相当于 grep -E,fgrep不支持正则表达式,这里就不再说明

    三、实例

1、显示/proc/meminfo文件中以大小s开头的行;

[root@mylinux ~]# grep -i --color=auto "^s" /proc/meminfo 
SwapCached:       0 kB
SwapTotal:        0 kB
SwapFree:         0 kB
Shmem:          180 kB
Slab:          68012 kB
SReclaimable:      48860 kB
SUnreclaim:       19152 kB

2、显示/etc/passwd文件中不以/bin/bash结尾的行;

[root@mylinux ~]# grep -v --color=auto "/bin/bash$" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
mysql:x:498:499::/home/mysql:/sbin/nologin

3、显示/etc/passwd文件中ID号最大的用户的用户名;

[root@mylinux ~]# sort -n -t: -k 3 /etc/passwd | tail -1 | cut -d: -f1
mylinux

4、如果用户root存在,显示其默认的shell程序;

[root@mylinux ~]# id root &> /dev/null && grep  "^root\>" /etc/passwd | cut -d: -f7 
/bin/bash

5、找出/etc/passwd中的两位或三位数;

[root@mylinux ~]# grep -E  --color=auto "\<[0-9]{2,3}\>" /etc/passwd  
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
mysql:x:498:499::/home/mysql:/sbin/nologin
mylinux:x:500:500::/home/mylinux:/bin/bash

6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行;   

grep -E --color=auto "^[[:space:]]{1,}[[:space:]]" /etc/rc.d/rc.sysinit

7、找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行;

[root@mylinux ~]# netstat -tan | grep -E --color=auto "LISTEN[[:space:]]*$"
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:5901                0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:6001                0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:22                 0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN

8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;

[root@mylinux ~]# grep -E --color=auto "(^.*):.*/\1$" /etc/passwd          
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
bash:x:501:501::/home/bash:/bin/bash

9、写一个模式,能匹配真正意义上的IP地址;(1.0.0.1--223.255.255.254)
      


本文转自 梦想成大牛 51CTO博客,原文链接:http://blog.51cto.com/yinsuifeng/1842747,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
运维 Unix Linux
grep正则表达式搜索
grep正则表达式搜索
16 3
|
7月前
|
Linux Perl
[笔记]linux grep之正则表达式
[笔记]linux grep之正则表达式
|
8月前
|
Unix Linux
如何在 Linux 中使用 Grep 和正则表达式进行文本搜索?
如何在 Linux 中使用 Grep 和正则表达式进行文本搜索?
198 5
|
11月前
|
机器学习/深度学习 NoSQL Linux
Linux行处理工具: grep 正则表达式
Linux行处理工具: grep 正则表达式
82 0
|
11月前
|
机器学习/深度学习 C语言 数据安全/隐私保护
『正则表达式』概念 及在grep、awk、sed、C语言、Python中的简单应用
正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式。它可以用来检查一个字符串是否符合某个规则,或者从一个字符串中提取出符合某个规则的子串。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。
|
机器学习/深度学习 移动开发 Go
正则表达式使用说明(包含find命令与grep命令)
正则表达式使用说明(包含find命令与grep命令)
113 0
|
自然语言处理 Shell Perl
Shell正则表达式(grep)
Shell正则表达式(grep)
52 0
|
机器学习/深度学习 Linux Perl
Linux三剑客grep、sed、awk以及正则表达式
$ 以...结尾 ^ 以...开头 . 匹配任意一个字符 \- 匹配前一个字符或子表达式任意次(例如:grep "g.*d" a.txt(过滤a.txt文件中的以g开头以d结尾*可以代表有任意多个字符或没有字符))
119 0
Linux三剑客grep、sed、awk以及正则表达式
|
机器学习/深度学习 Shell Linux