grep与正则表达式的使用
正则表达式以及grep的使用
grep是一种文本过滤工具(模式:pattern)基本使用用法如下:
grep [option] PATTERN FILE
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
--colour=auto:对匹配到的文本着色
-i:ignorecase 忽略字符大小写
-o:仅显示匹配到的字符串本身
-v:反向显示
-E:支持扩展的正则表达式
-q:静默模式 不输出任何信息
-A#:after 后#行
-B#:before 前#行
-C#:context 前后#行
基本正则表达式的元字符:
字符匹配:
. :任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数
*:匹配其前面的字符任意此;0,1,多次
.*:匹配任意长度的任意字符
\?: 匹配前面的字符0次或1次,即其前面的字符可有可无
\+: 匹配前面的字符1次或多次,即前面的字符至少出现1次
\{m\}:匹配前面的字符m次
\{m,n\}匹配前面的字符至少m次,最多n次
\{0,n}:最多n次
\{m,\}:至少m次
位置锚定
^:行首锚定:用于模式的最左侧
$:行尾锚定;用于模式最右侧
^PATTERN$:用于PATTERN来匹配整行
^$:空白行
^[[:space:]]*$:空白行货包含空白字符的行
单词:非特殊字符组成的连续字符串都称为单词
\< 或\b:词首锚定 用于单词模式的左侧
\>或\b:词尾锚定,用于单词模式的右侧
\<PATTERN\>:匹配完整单词
分组及引用
\(\):将一个或多个字符捆绑在一起,当作一个整体处理
例如:\(xy\)*ab
分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为
\1:模式从左侧起,第一个左括号以及与之匹配的右括号之前的模式所匹配到的字符
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之前的模式所匹配到的字符
\3:
后项引用:应用前面的分组括号中的模式所匹配到的字符
扩展正则表达式
字符匹配
.:匹配任意单个字符
[]:指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
次数匹配
*:任意次,0,1或多次
?:0次或1次,其前字符可有可无
+:其前字符至少1次
{m}:其前字符至少m次
{m,n}:其前的字符m次
位置锚定
^:行首锚定
$:词尾锚定
\< 或\b:词首锚定 用于单词模式的左侧
\>或\b:词尾锚定,用于单词模式的右侧
\<PATTERN\>:匹配完整单词
分组及引用:
():分组,括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中
后向引用:\1, \2
或: a|b: a或者b
练习:
1 取出ifconfig命令中的ip地址
[root@Linuxprobe ~]# ifconfig | egrep -o "([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-4]|25[0-5])\.(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-5]|25[0-5])\.){2}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-5]|25[0-5])"
10.127.69.19
255.255.255.0
10.127.69.255
127.0.0.1
255.0.0.0
192.168.122.1
255.255.255.0
192.168.122.255
[root@Linuxprobe ~]# ifconfig | egrep -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" 稍微简洁写的写法
10.127.69.19
255.255.255.0
10.127.69.255
127.0.0.1
255.0.0.0
192.168.122.1
255.255.255.0
192.168.122.255
[root@Linuxprobe ~]# ifconfig | egrep -o "(([0-9]{1,3})\.){3}[0-9]{1,3}"再次进行精简
10.127.69.19
255.255.255.0
10.127.69.255
127.0.0.1
255.0.0.0
192.168.122.1
255.255.255.0
192.168.122.255
2 找出/etc/passwd中用户名与默认shell同名的的行
[root@Linuxprobe ~]# cat /etc/passwd | grep -E "^([[:alnum:]]+\>).*\1$"
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:1002:1002::/home/bash:/bin/bash
nologin:x:1003:1003::/home/nologin:/bin/nologin
3 取出一个文件的基名和路径名
[root@Linuxprobe ~]# echo /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep -o "[^/]+$" 取一个文件的基本
ifcfg-ens33
[root@Linuxprobe ~]# echo /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep "^/.*/" -o 取出路径名
/etc/sysconfig/network-scripts/
4 取出/etc/rc.d/functions文件某个单词后面跟一个小括号的行
[root@Linuxprobe ~]# egrep "[[:alnum:]]+\>\(\)+" /etc/rc.d/init.d/functions -o
checkpid()
checkpids()
kill()
.....
5 用两种方法显示/proc/meminfoz中大写或小写S开头的行
[root@Linuxprobe backups]# grep "^[sS].*" /proc/meminfo
SwapCached:87404 kB
SwapTotal: 2097148 kB
SwapFree:1929492 kB
Shmem: 8332 kB
Slab: 189808 kB
SReclaimable: 118840 kB
SUnreclaim:70968 kB
[root@Linuxprobe backups]# grep -E "^(s|S).*" /proc/meminfo
SwapCached:87400 kB
SwapTotal: 2097148 kB
SwapFree:1929496 kB
Shmem: 8336 kB
Slab: 189808 kB
SReclaimable: 118840 kB
SUnreclaim:70968 kB
6 取出/etc/paswwd文件中默认shell为非/sbin/nogloin
[root@Linuxprobe backups]# grep -v "nologin\>$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
harrycai:x:1000:1000:harry.cai:/home/harrycai:/bin/bash
.............................................
7 取出/etc/paswwd文件中默认shell为/bin/bash的用户
[root@Linuxprobe backups]# grep "bash\>$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
harrycai:x:1000:1000:harry.cai:/home/harrycai:/bin/bash
student:x:1001:1001::/home/student:/bin/bash
bash:x:1002:1002::/home/bash:/bin/bash
user1:x:1004:1004::/home/user1:/bin/bash
.............................................
8 找出/etc/passwd 文件中的一位数或两位数
[root@Linuxprobe backups]# grep -E "\<[0-9]{1,2}\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
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
.............................................
9 显示/boot/grub/grub.conf中至少一个空白字符开头的行
[root@Linuxprobe backups]# grep -E "^[[:space:]]+" /boot/grub2/grub.cfg
10 显示/etc/rc.d/network文件中以#开头局,后面至少一个空白字符,而后又至少一个非空白字符行
[root@Linuxprobe backups]# grep -E "^#[[:space:]]+[^[:space:]]+" /etc/rc.d/init.d/network
# network Bring up/down networking
# chkconfig: 2345 10 90
# description: Activates/Deactivates all network interfaces configured to \
.......................
11 打出netstat -tan命令执行结果以“LISTEN”,后面跟空白字符的行
[root@Linuxprobe backups]# netstat -tan | grep -E "LISTEN\>[[:space:]]+"
tcp0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp0 0 192.168.122.1:530.0.0.0:* LISTEN
............................................
12 匹配出所有的邮件地址
[root@Linuxprobe ~]# cat mailtest | grep -E "\<[[:alnum:]]*@[[:alnum:]]*[[:punct:]]*[[:alnum:]]*\.[a-z]+\>"
noc@google.com
noc@telstra-pbs.cn
noc@pacnet.com.cn
414804000@qq.com
jzssysjzzyxgs@3158.com
sales@wiremesh-machine.cn
1305480186@qq.com
.............
grep与正则表达式的使用的更多相关文章
- Linux grep与正则表达式
grep命令 格式:grep [-acinv] [--color=auto] '查找字符串' filename -a 将binary文件以text文件的 -c 计算找到 ‘查找字符串’ ...
- grep和正则表达式
正则表达式示例表字 符 意 义 示 例* 任意长度的字符串. a* 表示: 空字符串.aaaa.a…? 长度为0或者1的字符串. a? 表示: 空字符串和a.+ 长度为一个或者多个的字符串. a+表示 ...
- grep与正则表达式,grep、egrep和fgrep
grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串. ...
- 第5天(半天)【shell编程初步、grep及正则表达式】
第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...
- [Linux 006]——grep和正则表达式
在使用系统时,我们或多或少的有一些搜索.查找的需求,必须要在文本中搜索某个关键字,或者过滤出文本中某些特定的行.grep 命令就为我们提供了这样一个功能,同时,grep 还可以使用正则表达式进行匹配, ...
- grep与正则表达式使用
grep简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.通常grep有三种版本grep.egrep(等同于grep -E)和fgrep.egrep为扩展的g ...
- grep用法详解:grep与正则表达式【转】
转自:http://blog.csdn.net/hellochenlian/article/details/34088179 grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配 ...
- linux初级学习笔记十:linux grep及正则表达式!(视频序号:04_4)
本节学习的命令:grep 本节学习的技能: grep对文本的匹配 正则表达式的使用 知识点十:grep及正则表达式(4_4) grep,egrep,fgrep: grep: 根据模式搜索文本,并将符合 ...
- grep使用正则表达式搜索IP地址
递归搜索当前目录及其子目录.子目录的子目录……所包含文件是否包含IP地址 grep -r "[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit: ...
- Linux文本处理三剑客之grep及正则表达式详解
Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...
随机推荐
- Oracle快速导入数据工具
sqlldr是oracle自带的快速导入批量数据的工具,常用于性能测试.考虑手工构造控制文件较为繁琐,因此使用脚本完成批量数据的自动导入. 基本知识 sqlldr命令语法 sqlldr dbname/ ...
- 树莓派上的软件安装和卸载命令汇总 [ZT]
转自:http://www.eeboard.com/bbs/thread-40823-1-1.html基础命令 安装软件 apt-get install softname1 softname2 sof ...
- 如何使用JDBC删除一条记录
//根据学生id删除操作 public void deleteOne(int id) { Statement stmt=null; // 发送SQL语句,返回执行结果 ...
- android开源项目框架大全:
android开源项目框架大全: 1.多页切换TabHost9 高仿网易云音乐客户端的Home页面切换Tabhost 高仿网易云音乐客户端的Home页面切换Tabhost,并且三角形是透明的,实现方式 ...
- hive 排序 分组计数后排序 几种不同函数的效果
[转至:http://blackproof.iteye.com/blog/2164260] 总结: 三个分析函数都是按照col1分组内从1开始排序 (假设4个数,第2和第3个数据相同) row_ ...
- 一个查询指定错误记录数据表错误记录条数的shell脚本
#!/bin/bash #author:skycheng #parameters db_user=dbuser db_pass=dbpass db_host=xxx.xxx.xxx.xxx datab ...
- MySql union与order by
[MySql union与order by] 如果您想使用ORDER BY或LIMIT子句来对全部UNION结果进行分类或限制,则应对单个地SELECT语句加圆括号,并把ORDER BY或LIMIT放 ...
- 如何向 Windows 7 镜像中添加 USB3.0 驱动
如何向 Windows 7 镜像中添加 USB3.0 驱动 1. Microsoft 在 Windows 7 的安装光盘并没有集成各个厂商的 USB3.0 驱动,可 以使用下面方法添加 USB3.0 ...
- c++:空构造空析构的益处之一
项目开发过程中发现一个问题,有段代码,一个动态库的cpp代码里不包含头文件中类的空构造空析构实现,就会出现编译出的动态库依赖项少了很多.而添加后则多了好几个依赖项.下面看例子: ##a.h class ...
- viewpager fragment 滑动界面
先新建几个fragment,包括java和xml 然后在主界面的布局文件中: <android.support.v4.view.ViewPager android:id="@+id/m ...