正则表达式及示例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单的说,正则表达式就是一套处理字符串的规则和方法,以行为单位为字符串进行处理,通过特殊的符号的辅助,我们可以快速的过滤,替换某些特定的字符串。
运维工作中,会有大量访问日志,错误数据,大数据。如何能够快速的过滤出我们需要的内容,这就是正则表达式。
awk,sed,grep(egrep)三剑客要想工作的更高效,那一定离不开正则表达式的配合的。
我们要想玩好三剑客,首先就要掌握正则表达式。
linux里正则表达式。主要是awk,sed,grep(egrep)三剑客的正则表达式。
正则表达式实际就是一些特殊字符,赋予了它特定的含义。
1. 基础正则表达式:BRE
1) ^word 搜索以word开头的。
2) word$ 搜索以word结果的。
3) . 代表且只能代表任意一个字符。(隐藏文件的表示,可以使得一个配置文件生效。)
4) \ 例\.转意符号,让有着特殊身份意义的字符,脱掉马甲,还原原型。
5) * 例o* 重复零个或多个前面的一个字符。
6) .* 匹配所有字符。^.*以任意多个字符开头。
7) [] 符集合的重复特殊字符的符号。
8) [^word] 匹配不包含^后的任意字符的内容。
9) a\{n,m\} 重复n到m次,前一个重复的字符。如果用egrep可以去掉斜线。
a)\{n,\} 至少n次,前一个重复的字符。如果用egrep可以去掉斜线。
\{n\} 重复n次,前一个重复的字符。如果用egrep可以去掉斜线。
2. 扩展的正则表达:ERE
+ 重复一个或一个以上前面的字符。
? 重复0个或一个前面的字符。
| 用或的方式查找多个符合的字符串
() 找出“用户组”字符串。
3. 查询正在表达式
man grep 搜索 /REGULAR
man sed 搜索 /REGULAR
man awk 搜索 /REGULAR
4. 请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答。)
ifconfig eth0| grep “inet addr”|cut –d “:” –f2|cut –d “” –f1
ifconfig eth0| grep “inet addr”|awk –F “:” ‘{print $2}’|awk ‘{print $1}’
ifconfig eth0|grep “inet addr”|awk –F “[: ]” ‘{print $13}’
ifconfig eth0|grep “inet addr”|awk –F “[: ]+” ‘{print $4}’
ifconfig eth0|sed –n ‘2p’|awk –F “[: ]+” ‘{print $4}
ifconfig eth0 awk –F “[: ]+” ‘NR==2 {print $4}’
5. 处理技巧:
6. 匹配要的目标(获取的字符串如上文的IP)前的字符串一般用以…(^.*)开头来匹配开头,匹配的结尾写上实际的字符,如:”^.*addr:” 表达式就匹配“ inet addr:”,而处理需要的目标后的内容一般在匹配的开头写上实际的字符,而结尾是用以…结尾(.*$)来匹配。如:Bcast:.*$部分表示匹配”Bcast:10.0.0.255 Mask:255.255.255.0”。
ifconfig eth0|sed –n ‘/inet addr/p’|sed ‘s#^.*addr:##g’|sed’s# Bc.*$##g’
ifconfig eth0|sed –n ‘s#^.*addr:\(.*\) Bcast.*$#\1#gp’
7. sed小括
号()分组功能
sed’s/■/▲/标签’<==斜线可以被其他字符替换
■部分可以用正则表达式,▲的部分不能用正则表达式。
()是分组(group),再■部分使用()括起来的内容,再用▲的位置可以使用\1调用前面扩号内的内容。如果■部分有多个括号,那么一次是\1,\2,\3调用第二个和第三个括号,以此类推。
echo “ddd kkk” >b.txt
cat b.txt
ddd kkk
sed ‘s#\(ddd\) \(kkk\)##g’ b.txt
sed ’s#\(ddd\) \(kkk\)#\1#g’ b.txt
ddd
sed ‘s#\(ddd\) \(kkk\)#\1 \2#g’ b.txt
ddd kkk
ifconfig|sed –n ‘s#^.*dr:\([0-9].* \)’ Bcast:\([0-9].*\) Ma.*#\1\2#gp’
输入浅出awk sed
ed 行编辑器
s/regular/complex/g
替换命令s,regular正则表达式,complex要替换的内容complex=regular的结果。
使用sed
制定简单的指令
可以在命令行上制定简单的编辑命令。
sed [-e]’instruction’ file
只有命令行上给出多个命令时才需要用-ed选项。它告诉sed将下一个参数解释为命令。当只有一个命令时,sed它可以自己做决定。
例如使用文本替换命令s,用3333替换掉EOF并插入到test文本。
root@ubuntukvm:~# more test
goodesf s12wew
www
rr
77
EOF
>
<
:wq
q
root@ubuntukvm:~# sed -i 's/EOF/3333/' test
root@ubuntukvm:~# more test
goodesf s12wew
www
rr
77
3333
>
<
:wq
8. 说明,以上例子可以不使用单引号,但下一个例子就需要使用单引号,因为替换命令中包含空格:
9. 选项总结
10. 选项–e 编辑随后的指令–f 跟随脚本的文件名–n 阻止输入行的自动输出
root@ubuntukvm:~# sed -n -e 's/www/3333/p' test
3333