什么是正则表达式
基本正则表达式的元字符
扩展正则表达式
grep的基本理解
的基本选项
的应用实例
什么是正则表达式
正则表达式,又称正规表示法、常规表示法。(英语:RegularExpression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式的文本。(摘自百度百科)
个人理解:正则表达式是由一些特殊字符及文本所标写的一种模式,通过搭配文本处理工具来搜索文本并将匹配数据打印出来。
正则表达式分类
基本的正则表达式(BasicRegular Expression又叫BasicRegEx简称BRE)
扩展的正则表达式(Extended Regular Expression又叫Extended RegEx简称ERE)
引擎:采用不同算法,检查处理正则表达式的软件模块
基本正则表达式的元字符
字符匹配
.单个字符 []匹配任意字符以内范围 [^]匹配任意字符以外的的范围(取反) [:digit:]匹配任意数字 [:lower:]匹配任意小写字母 [:upper:]匹配任意大写字母 [:alpha:]匹配任意大小写字母 [:space:]匹配任意空白或空格 [:punct:]匹配所有标点符号 [:alnum:]匹配所有字母和数字
次数匹配
*匹配前一个字符的0到任意次 .*任意字符的任意长度 \?匹配前面的字符0-1次 \+匹配前面字符的1次以上包括1次 \{n\}匹配前面字符n次 \{m,n\}匹配前面字符最少m,最多n次 \{,m\}最少m次 \{m,\}最多m次
位置锚定
^行首 $行尾 ^$空行 \<词首锚定\>词尾锚定 \b词首锚定\b词尾锚定 \<匹配整个单词\>
分组
将一个或多个字符绑定在一起作为一个整体处理
\(\)
例如:\(root\)匹配一行中所有为root字符的组
ab*c
、表示的是b的任意次而不是说是ab的任意次,要实现这一功能,就可以使用分组\(ab\)*c
分组括号中的模式匹配到的内容会被正则表达式引擎自动记录在内部变量中,这些变量为:
\1:模式从左侧开始,第一个左侧括号以及与之匹配的右括号之间的模式所匹配到的字符
2\:模式从左侧开始,第二个左侧括号以及与之匹配的右括号之间的模式所匹配到的字符
括号可以内嵌但不能交叉
扩展正则表达式
扩展正则表达式的用法
erep -E或egrep
扩展正则表达式的元字符
字符匹配 .任意单个字符 []指定范围内的字符 []不在范围内的字符,取反
次数匹配
*匹配前面字符的任意次 ?匹配前面自0次或1次 +匹配前面字符至少1次以上包括1次 {n}匹配n次 {n,m}匹配至少n次最多m次
位置锚定
^行首 $行尾 ^$空行 \<,\b:句首 \>,\b:句尾 或者使用| A|b:A或b
grep的基本理解
文本搜索工具,通过正则表达式及文本字符编写的过滤条件进行搭配来对文本进行匹配检查,打印匹配并输出结果。 grep基本选项
1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式) 2、显示/etc/passwd文件中不以/bin/bash结尾的行 4、找出/etc/passwd中的两位或三位数 5、显示/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行 6、找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行 7、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin),而后找出/etc/passwd文件中用户名同shell名的行#语法
grep[OPTIONS]PATTERN[FILE...]
#基本选项
grep-I不区分大小写
grep-v取反
grep-n显示行号
grep-c显示匹配的有多少行
grep-o只显示匹配的字符或其他
grep-q静默模式就是不显示匹配的结果,什么都不显示
用echo%?得出上一条命令的结果
0为正确输出
非0位错误的命令输出
Grep-A{number}匹配结果行后几行
Grep-B{number}匹配结果前几行
Grep-C{number}匹配结果的前后几行
Grep-e关键字-e关键字多个关键字作为匹配条件(不限制说一定要匹配前后,匹配前后其中一个)
Grep-w匹配整个单词不包含包括
grep应用实例
[root@localhost~]#grep-i"^s"/proc/meminfo
SwapCached:64kB
SwapTotal:2097148kB
SwapFree:2091288kB
Shmem:6016kB
Slab:228152kB
SReclaimable:153116kB
SUnreclaim:75036kB
[root@localhost~]#grep-e"^S"-e"^s"/proc/meminfo
SwapCached:64kB
SwapTotal:2097148kB
SwapFree:2091288kB
Shmem:6016kB
Slab:228152kB
SReclaimable:153116kB
SUnreclaim:75036kB
[root@localhost~]#grep-v"/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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:AvahiIPv4LLStack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemdBusProxy:/:/sbin/nologin
systemd-network:x:998:996:systemdNetworkManagement:/:/sbin/nologin
dbus:x:81:81:Systemmessagebus:/:/sbin/nologin
[root@localhost~]#grep"\brpc\b"/etc/passwd|cut-d:-f7
/sbin/nologin
[root@localhost~]#grep"\b[[:digit:]]\{2,3\}\b"/etc/passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:AvahiIPv4LLStack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemdBusProxy:/:/sbin/nologin
systemd-network:x:998:996:systemdNetworkManagement:/:/sbin/nologin
dbus:x:81:81:Systemmessagebus:/:/sbin/nologin
polkitd:x:997:995:Userforpolkitd:/:/sbin/nologin
colord:x:996:994:Userforcolord:/var/lib/colord:/sbin/nologin
[root@localhost~]#grep"^[[:space:]]\+[^[:space:]].*"/etc/grub2.cfg
load_env
setdefault="${next_entry}"
setnext_entry=
save_envnext_entry
setboot_once=true
setdefault="${saved_entry}"
menuentry_id_option="--id"
menuentry_id_option=""
setsaved_entry="${prev_saved_entry}"
save_envsaved_entry
setprev_saved_entry=
save_envprev_saved_entry
setboot_once=true
if[-z"${boot_once}"];
[root@localhost~]#netstat-tan|grep"LISTEN[[:space:]]*$"
tcp00192.168.122.1:530.0.0.0:*LISTEN
tcp000.0.0.0:220.0.0.0:*LISTEN
tcp00127.0.0.1:6310.0.0.0:*LISTEN
tcp00127.0.0.1:250.0.0.0:*LISTEN
tcp00127.0.0.1:60100.0.0.0:*LISTEN
tcp600:::22:::*LISTEN
tcp600::1:631:::*LISTEN
tcp600::1:25:::*LISTEN
tcp600::1:6010:::*LISTEN
[root@localhosttestdir]#grep"^\(\<.*\>\).*/\1$"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:1001:1001::/home/bash:/bin/bash
nologin:x:1004:1004::/home/nologin:/sbin/nologin