shell脚本-正则、grep、sed、awk三剑客

一、正则表达式及grep:

概述:

正则表达式–简写:regex、regexp或RE,就是为处理大量的字符串而定义的一台规则和方法。例:假设“@”代表oldboy,”!” 代表eitboy。则echo “@!” =”oldboy eitboy”。通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。

支持正则表达式的程序:
Linux正则表达式:grep、awk、sed
PHP、JAVA、Perl、Python(Perl兼容PCRE)


学习目的:

在企业工作中,每天做的Linux运维工作中,时刻都会面对大量带有字符串的文本配置、程序、命令输出及日志文件等,而我们经常会有迫切的需要,从大量的字符串内容中查找符合工作需要的特定字符串。这就需要正则表达式,因此,可以说正则表达式就是为过滤这样的字符串而生的。


正则表达式:

可以帮助运维,从过多的文件内容当中,获取你想要的任何数据
:ifconfig的输出取IP,cat /var/log/messages输出取关键信息等。
注意事项:
1、 正则表达式应用非常广泛,存在于各种语言中,例:PHP、Python、JAVA、Perl等。但是,Linux 系统中的正则表达式,最常应用正则表达式的命令就是grep(egrep)、awk、sed,Linux三剑客想要更高效的工作,离不开正则表达式的配合。
2、 正则表达式与常用的通配符特殊字符是有本质区别的,一定要注意。
:ls *.log中的 * 是通配符(表示所有),不是正则表达式。


基础正则表达式:

^word 搜索以word开头的。vi/vim中 ^ 一行的开头。
word$ 搜索以word结尾的。vi/vim中 $ 一行的结尾。
^$ 表示空行
. 代表且只能代表任意一个单个字符
\ 例:\. 只代表点本身,转义符号,让有特殊身份意义的字符,脱掉马甲,还原;
\n 换行符
\r 匹配回车
\w 匹配任意一个字符和数字
* 重复0次或多次前面的一个字符。
.* 匹配所有字符。例:^.* 以任意多个字符开头,.*$以任意多个字符结尾。
[abc] 匹配字符集内的任意一个字符。
[^abc] 不要abc这三个字符排列组合成的任意一个字符串。中括号里的 ^ 为取反。
[1-9] 只要包含1-9之内的数字,就打印该行
a\{n,m\} 重复n到m次前一个重复的字符。若用egrep、sed -r可以去掉斜线。
\{n,\} 重复至少n 次前一个重复的字符。若用egrep、sed -r可以去掉斜线。
\{n\} 只打印前边出现n次的字符。若用egrep、sed -r可以去掉斜线
\{,n\} 打印前边的那个最多出现n次的字符
:egrep,grep –E或sed –r 过滤一般特殊字符可以不转义。


扩展的正则表达式:

ERE(egrep或grep -E)
+ 重复一次或一次以上前面的一个字符。等同于{n,}
? 重复0次或一次前面的一个字符。等同于{,m}
| 或者的意思,用或的方式查找多个符合的字符串。
() 找出括号内的字符串。
理解正则:
提示:若不在shell中运行,正则要生效必须借助支持正则的工具)
扩展正则表达式:在grep中使用的话,要结合-E选项
需要使用grep -E或者egrep


如何将/etc/passwd文件中的前10行,输出到/root/test.txt:

head /etc/passwd > /root/test.txt   head命令默认前十行

在这里插入图片描述
过滤出以root开头的行:

grep "^root" /root/test.txt

在这里插入图片描述
过滤出以halt结尾的行:

grep "halt$" /root/test.txt

在这里插入图片描述
过滤出adm这一行的前两行和后三行:

grep -B 2 -A 3 "adm" /root/test.txt

在这里插入图片描述

grep -C 2 "adm" /root/test.txt 

在这里插入图片描述
过滤出test.txt文件中root在中间的行:

grep "root" test.txt | grep -v "^root" | grep -v "root$"

在这里插入图片描述
在shell脚本中,grep、sed、awk号称是shell脚本三剑客,而且这几个命令,是可以结合正则表达式来操作的■

grep "g.d" test.txt 

在这里插入图片描述

grep g"o*"d test.txt 

在这里插入图片描述

grep g".*"d test.txt

在这里插入图片描述

grep g"\."d test.txt
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张的学习笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值