作用:
正则表达式是对于字符串操作的一种逻辑公式,用事先定义好的一些字符及特殊字符的组合来过滤出我们需要的的字符。
特点:
灵活性,逻辑性和功能性强 方便快捷
组成部分:
字符匹配
次数匹配
位置锚定
字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即A-Z, a-z
[:lower:] 小写字母[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:]水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
次数匹配:
* 匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
.*任意长度的任意字符
\?匹配其前面的字符0或1次
\+匹配其前面的字符至少1次
\{n\}匹配前面的字符n次
\{m,n\}匹配前面的字符至少m次,至多n次
\{,n\}匹配前面的字符至多n次
\{n,\}匹配前面的字符至少n次
位置锚定:
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行 (^[[:blank:]]*$)
\< 或\b词首锚定,用于单词模式的左侧
\> 或\b词尾锚定;用于单词模式的右侧
\<PATTERN\>匹配整个单词
命令:grep 关键字 文件
-A# 匹配行及下边#行
-B#匹配行及上#行
-C#匹配行及上下#行
-i忽略字符大小写
-n显示序号
-o只显示匹配内容
-v取反
实例:
1:显示/etc/passwd文件中以/bin/bash结尾的行
命令:
[root@localhost app]# cat /etc/passwd | grep '\(/bin/bash\)$'
结果:
root:x:0:0:root:/root:/bin/bash
linuxenglish:x:1000:1000:linux English:/home/linuxenglish:/bin/bash
yangyuan:x:101010:1005::yy:/bin/bash
natasha:x:1004:1009::/home/natasha:/bin/bash
antasha:x:1005:1010::/home/antasha:/bin/bash
harry:x:1006:1011::/home/harry:/bin/bash
natasha1:x:1008:1014::/home/natasha1:/bin/bash
natasha2:x:1009:1016::/home/natasha2:/bin/bash
harry2:x:1010:1017::/home/harry2:/bin/bash
wangcai:x:1012:1020::/home/wangcai:/bin/bash
liubai:x:1013:1023::/home/liubai:/bin/bash
guanyu:x:1014:1024::/home/guanyu:/bin/bash
zhangfei:x:1015:1025::/home/zhangfei:/bin/bash
zhaoliu:x:1016:1026::/app/zhaoliu:/bin/bash
gg:x:1017:1031::/home/gg:/bin/bash
gggg:x:1018:1032::/home/gggg:/bin/bash
ggg:x:1019:1033::/home/ggg:/bin/bash
ug2:x:1020:1036::/home/ug2:/bin/bash
ug22:x:1021:1037::/home/ug22:/bin/bash
mage:x:1028:1045::/home/mage:/bin/bash
wang:x:1029:1046::/home/wang:/bin/bash
g11:x:1030:1048::/home/g11:/bin/bash
alice:x:1031:1050::/home/alice:/bin/bash
maxtom:x:1032:1052::/home/maxtom:/bin/bash
oyh:x:1033:1053::/home/oyh:/bin/bash
说明:利用grep进行筛选时 利用\(\)将所需的关键字(/bin/bash)进行锚定。
最后加上行尾锚定,防止字符中间有关键字,
注意: 利用正则表达式时需要用转义字符
2:使用grep取出/etc/passwd/functions路径的目录名
命令:[root@localhost app]# echo "/etc/passwd/functions/" | grep -o '/.*/.' | grep -o '/.*/'
结果:/etc/passwd/
说明:取目录名时,可将问题分部进行,
1.利用 grep -o '/.*/.'
筛选出:/etc/passwd/f
2.利用 grep -o '/.*/'
得出最后的目录名
3.文件mag.txt中,取出首位呼应的行:
mage.txt的内容:
ab cd a
a d ad x
命令:[root@localhost app]# cat mage.txt| grep '\(^.\).*\1
结果:ab cd a
说明:利用行分组引用将()里匹配到的再次引用
4.利用上题的文件,筛选出单词cd
命令:[root@localhost app]# cat txt | grep '\<cd\>'
结果:cd
说明:利用单词锚定,直接取出单词cd