正则表达式(regular expression,RE),是一种字符模式,用于在查找过程中匹配指定的字符。能被vim,sed,awk,grep调用。
元字符
1、^行首定位符
grep "^root" /etc/psaawd
查找passwd中以root开头的行
2、$行尾定位符
grep "day$" 1.txt
3、.匹配任意单个字符
grep "a.c" 1.txt
搜索出所有的a什么c
4、*匹配前导符0次到多次
grep "abc*" 1.txt
搜索出ab,c可带可不带,ab后面也可以有其他字符
5、.*任意多个字符
所有字符都会出现
6、[]匹配指定范围内的一个字符
grep "[Dd]og" 1.txt
搜索出dog和Dog
7、[-]匹配指定范围内的一个字符,连续范围
grep "[1-9]days" 1.txt
8、[^]匹配不在指定组内的字符
grep "[^123]days" 1.txt
排除1day,2day,3day
9、\转意符,转去右侧符号的意思
10、\<词首定位符
grep "\<love" 1.txt
找词首是love的
11、\>词尾定位符
grep "love\>" 1.txt
12、()匹配稍后使用的字符的标签。(把括号里的内容作为一个整体,方便调用)
:% s/\(.*\)/#\1/
该命令用于加注释
%:应用于所有
s///:替换
.*:所有字符
():将括号里的内容作为整体,等待引用。括号前加\进行转义
\1:引用第一个可匹配的字符
13、x\{m\}字符x出现m次
grep "o\{3\}" 1.txt
查找出现3次o的
14、x\{m,\}字符x出现m次以上
15、x\{m,n\}字符x出现m到n次
扩展正则表达式
16、+匹配前导符1到n次
17、?匹配前导符0到1次
18、a|b匹配a或者b
grep
grep:基本正则
egrep:支持扩展正则
fgrep:不支持正则
sed
Stream EDitor:流编辑
sed是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把处理的行存储在临时缓冲区,处理完后,把内容送到屏幕。接着处理下一行,直到处理结束。文件内容并没有改变,除非使用重定向存储输出。
格式:
1、sed 选项 命令 文件
2、sed 选项 -f 脚本 文件
汇总示例:
1、删除命令:d
sed -ri '/root/d' passwd.txt
sed -ri '3d' passwd.txt #删掉第三行
sed -ri '3{d}' passwd.txt #删掉第三行
sed -ri '3{d;}' passwd.txt #删掉第三行,后面可接多命令
sed -ri '3,$d' passwd.txt #删掉第三行到最后一行
-r支持正则,-i写入到文件,不加i输出到屏幕上,但是文件不变。//中间的内容是选定的范围,d表示删除。
2、替换命令:s
sed -ri 's/root/aofa/' passwd.txt
sed -ri 's/^root/aofa/' passwd.txt
sed -ri 's/root/aofa/g' passwd.txt #g代表替换全局,所有的root都换掉,不加就只替换每行第一个
sed -ri 's/root/&s/' passwd.txt #&是前面找到的字符,这里代表root替换成roots
3、整行替换:c
sed -ri '2caaaaaaa' passwd
第2行换成aaaaaaa
sed实战:
1、删除配置文件中的注释行
sed -ri '/^#/d' /etc/vsftpd/vsftpd.conf
2、修改文件
sed -ri '/SELINUX=/cSELINUX=disabled' /etc/selinux/config
3、给文件添加注释
sed -ri '1,10s/^/#/ 1.txt
awk
作用:把文件按列拆分
语法:awk 选项 '命令' 文件名
-F:定义输入字段分隔符
BEGIN{}:处理前
{}:处理时
END{}:处理后
内部变量:
$0:整行;$1:第一段;$2:第二段......
FS:输入字段分隔符(默认空格)
OFS:输出字段分隔符
RS:输入记录(行)分隔符
ORS:输出记录(行)分隔符
FNR:多文件独立编号
NR:多文件汇总编号
NF:字段总数