正则表达式笔记

正则表达式:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作中,无论是查找某个文档,抑或查询某个日志文件分析其内容,都会用到正则表达式。

其实正则表达式,只是一种思想,一种表示方法。只要我们使用的工具支持表示这种思想那么这个工具就可以处理正则表达式的字符串。常用的工具有grep, sed, awk 等

一、grep和egrep工具的使用

1、grep命令用于查找文件里符合条件的字符串,格式:grep [选项] '关键字符' filename

选项  
-c :打印符合要求的行数
-i :忽略大小写
-n :在输出符合要求的行的同时连同行号一起输出
-v :打印不符合要求的行
-r :遍历所有子目录甚至孙目录
-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行
-B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行
-C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行 

实际操作

[root@localhost ~]# mkdir grep (创建grep目录)
[root@localhost ~]# cd grep
[root@localhost grep]# mv /etc/passwd .  (将/etc/passwd拷贝到该目录下,用作样本文件)
[root@localhost grep]# ls
passwd
[root@localhost grep]# grep 'nologin' passwd  (过滤含有'nologin'字符的文件,并会显示成红色)
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
......(中间省略)
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[root@localhost grep]# which grep
alias grep='grep --color=auto'
/usr/bin/grep
[root@localhost grep]# grep -c 'nologin' passwd (显示有多少行)
15
[root@localhost grep]# grep -n 'nologin' passwd  (显示行号)
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
......(中间省略)
18:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
19:chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[root@localhost grep]# grep -niv 'nologin' passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
20:mxk:x:1000:1000::/home/mxk:/bin/bash
[root@localhost grep]# grep 'root' /etc (加-r会将该目录下所有含有'root'的文件列出来,不加会报错)
grep: /etc: 是一个目录
[root@localhost grep]# grep 'root' /etc/passwd- 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost grep]# grep -r 'root' /etc > /tmp/grep.log  (将过滤含有root的问价追加到/tmp/grep.log文件去)
[root@localhost grep]# grep passwd /tmp/grep.log (可以查看到内容)
/etc/passwd-:root:x:0:0:root:/root:/bin/bash
/etc/passwd-:operator:x:11:0:operator:/root:/sbin/nologin
/etc/postfix/main.cf:# the system passwd file in the chroot jail is just not practical.
[root@localhost grep]# grep -A2 'halt' /etc/passwd  (把包含 ‘halt’ 的行以及这行下面的两行都打印出)
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
[root@localhost grep]# grep -B2 'halt' /etc/passwd  (把包含 ‘halt’ 的行以及这行上面的两行都打印出)
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[root@localhost grep]# grep -C2 'halt' /etc/passwd  (把包含 ‘halt’ 的行以及这行上面和下面的各两行都打印出)
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 

相关正则表达式的使用(1)

[root@localhost grep]# grep -n '[0-9]' passwd (显示含有0-9任何数字的行)
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
......(中间省略)
19:chrony:x:998:996::/var/lib/chrony:/sbin/nologin
20:mxk:x:1000:1000::/home/mxk:/bin/bash
[root@localhost grep]# grep -v '[0-9]' passwd  (显示不含数字的行,表示该文件每一行都含有数字)
[root@localhost grep]#
“^字符”表示以什么字符开头的行
[root@localhost grep]# grep -n '^#' inittab  (过滤显示以#开头的所有行)
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
5:#
6:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
7:#
8:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
9:#
10:# multi-user.target: analogous to runlevel 3
11:# graphical.target: analogous to runlevel 5
12:#
14:# To view current default target, run:
15:# systemctl get-default
16:#
17:# To set a default target, run:
18:# systemctl set-default TARGET.target
19:#
[root@localhost grep]# grep -nv '^#' inittab  (过滤显示不以#开头的所有行)
4:hfdahfdghafgah
13:fadsjfahfaj
[root@localhost grep]# grep -n '[^0-9]' inittab (过滤显示包含数字的,其中数字不显示颜色,其他字符显示红色)
[root@localhost grep]# grep -n '^[^0-9]' inittab  (显示不以数字开头的行)
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:hfdahfdghafgah
5:#
6:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
7:#
8:&#$%^&&
9:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
10:#
12:# multi-user.target: analogous to runlevel 3
13:# graphical.target: analogous to runlevel 5
14:#
15:fadsjfahfaj
16:# To view current default target, run:
17:# systemctl get-default
18:aaaaaaaa
19:#
20:# To set a default target, run:
21:# systemctl set-default TARGET.target
22:#
[root@localhost grep]# grep -nv '^[^0-9]' inittab  (显示以数字开头数字的行)
11:11111111

相关正则表达式的使用(2)

[root@localhost grep]# grep 'r.o' passwd   (. 表示任意的一个字符,并且会显示红色)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost grep]# vim passwd 
[root@localhost grep]# grep 'r.o' passwd   (可以匹配到任何字符)
root:x:0:0:root:/root:/bin/bash
ajhfuvbufab:133222:fafer4:gfdsfee:rao:222
222:r>o:fajhfug
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost grep]# grep 'r.o' passwd   (也可以匹配到与之相同的 . )
root:x:0:0:root:/root:/bin/bash
ajhfuvbufab:133222:fafer4:gfdsfee:rao:222
222:r>o:fajhfug
333:r.o:fasdf
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost grep]# grep 'o*o' passwd   ( *表示零个或多个任意字符,而.*就包含了零个或多个任意字符,空行也包含在内)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
ajhfuvbufab:133222:fafer4:gfdsfee:rao:222
.....(中间省略)
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
mxk:x:1000:1000::/home/mxk:/bin/bash
[root@localhost grep]# grep 'o\{2\}' passwd  (过滤显示字符的出现次数,现在显示的是o出现两次以上的文件)
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin  

grep -E 'o{2}' passwd和grep 'o\{2\}' passwd表示同样的意思

{ },其内部为数字,表示前面的字符要重复的次数。上例中表示包含有两个o 即 ‘oo’ 的行。注意,{ }左右都需要加上脱意字符 ‘\’, 另外,使用{ }我们还可以表示一个范围的,具体格式是 ‘{n1,n2}’ 其中n1

2、egrep的用法

1)egrep的grep扩展版本,可以用egrep完成grep不能完成的工作

[root@localhost grep]# egrep 'o{2}' passwd  (egrep在执行此命令时不需要加脱意字符 ‘\’)
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@localhost grep]# egrep 'o+o' passwd  (筛选+前面一个或一个以上的字符)
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin 
[root@localhost grep]# egrep 'o+t' passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost grep]# egrep 'o?t' passwd  (筛选?前面零个或一个指定的字符)
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
......(中间省略)
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@localhost grep]# egrep 'root|halt' passwd   (| 表示或者的意思,显示红色)
root:x:0:0:root:/root:/bin/bash
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin    

二、sed介绍

sed工具以及awk工具能实现把替换的文本输出到屏幕上的功能,sed和awk都是流式编辑器,是针对文档的行来操作的。

1、sed命令格式:sed -n 'n'p 文件名

选项
-e
                    
                    

你可能感兴趣的:(awk,开发工具,运维)