shell脚本之正则表达式

一、基础正则表达式实例:
元字符总结:在这里插入图片描述
在Linux系统中常见的文件处理工具中grep和sed支持基础正则表达式。

grep命令选项:

-i:查找时不区分大小写;
-v:查找时反向输出,如查找不包含某些字符的内容;
-n:表示查找出结果后显示行号;

这三个选项可以结合使用,如“-in”,查找时不区分大小写并显示行号。
示例①:

[root@localhost ~]# grep -n ‘the’ test.txt #查找test文件中包含字符“the”的行
#可以将选项改为“-vn”来查找不包含“the”的行。

示例②:

[root@localhost ~]# grep -n “sh[io]rt” test.txt #[io]表示匹配 i 或o的显示出来
#[ ]中无论有几个字符都仅代表匹配一个字符即可。

示例③:

[root@localhost ~]# grep -n ‘oo’ test.txt #查找包含字符“oo”的行。
[root@localhost ~]# grep -n ‘ooo*’ test.txt #查找包含至少两个o以上的字符串。
[root@localhost ~]# grep -n ‘o{2}’ test.txt #查找包含两个“o”的字符串。
[root@localhost ~]# grep -n ‘o{2,5}’ test.txt #查找包含2~5个o的字符串。
[root@localhost ~]# grep -n ‘o{2,}’ test.txt #查找包含两个以上“o”的字符串。

示例④:

[root@localhost ~]# grep -n ‘[^w]oo’ test.txt #查找“oo”前面不是w的字符串。
[root@localhost ~]# grep -n ‘[^a-z]oo’ test.txt #查找oo前不是小写字母的行。
[root@localhost ~]# grep -n ‘[0-9]’ test.txt #查找包含数字的行。
[root@localhost ~]# grep -n ‘^the’ test.txt #查找以“the”开头的行。
[root@localhost ~]# grep -n ‘1’ test.txt #查找以小写字母开头的行。
[root@localhost ~]# grep -n ‘2’ test.txt #查找以大写字母开头的行。
[root@localhost ~]# grep -n ‘[a-zA-Z]’ test.txt #查找不以字母开头的行。

“^”在[ ] 号外面表示定位行首,也就是以某些内容开头,若在[ ]内则表示反向选择。

[root@localhost ~]# grep -n ‘.$’ test.txt #查找以 “ . ” 结尾的行。
[root@localhost ~]# grep -n ‘w…d’ test.txt #查找w开头,中间两个未知字符,d结尾的行。
[root@localhost ~]# grep -n ‘woo*d’ test.txt #查找w开头d结尾,中间至少包含一个o的字符串。
[root@localhost ~]# grep -n ‘w.d’ test.txt #查找w开头d结尾,中间的字符可有可无的字符串。
[root@localhost ~]# grep -n '[0-9][0-9]
’ test.txt #查询任意数字所在行

二、扩展正则表达式
一般来说基础正则表达式足以我们使用了,但如果想要简化整个指令,那么就可以使用扩展正则表达式,如果使用扩展正则表达式,需要使用egrep或awk命令,常见的扩展正则表达式的元字符主要包括如下几个:在这里插入图片描述

二.sed
语法如下:

[root@localhost ~]# ]sed [-nefr] [动作 ]
1
选项与参数如下:
n :使用安静(silent)模式。在一般sed的用法中,所有来自STDIN 的数据一般都会被列出到屏幕上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令行界面上进行sed的动作编辑;
-f :直接将sed的动作写在一一个文件内, -f filename 则可以执行filename 内的sed动作;
-r:sed的动作支持的是延伸型正则表达式的语法。(默认是基础正则表达式语法)
-i:直接修改读取的文件内容,而不是由屏幕输出。

案例:

[root@localhost ~]# nl /etc/passwd | sed '2,5’d
\删除2到5行内容
[root@localhost ~]# nl /etc/passwd | sed ‘asd’
\在所有后面行加上asd
[root@localhost ~]# nl /etc/passwd | sed ‘2a da …
aaa’
\增将两行以上
[root@localhost ~]# nl /etc/passwd | sed ‘2,5c ccccccccccccc’
\第2-5行的内容取代成为ccccccccc
[root@localhost ~]# nl /etc/passwd | sed -n ‘5,7p’
\仅列出5到7行的内容

部分数据的搜寻与取代的功能
sed ‘s/要被取代的字串/新的字串/g’
sed 的“ -i ”选项可以直接修改文件内容,

延伸正则表达式在这里插入图片描述

三.awk
awk是一个强大的工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
语法如下:

[root@localhost ~]# awk '条 件类型1{动作1}条件类型2{动作2} … ’ filenamne
1
[root@localhost ~]# last -n 5 | awk ‘{print $1 “\t” $3}’
\取出帐号与登陆者的 IP ,且帐号与 IP 之间以 [tab] 隔开

**整个 awk 的处理流程是:

读入第一行,并将第一行的数据填入 $0, $1, $2… 等变量当中;
依据 “条件类型” 的限制,判断是否需要进行后面的 “动作”;
做完所有的动作与条件类型;
若还有后续的“行”的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止。
**

[root@localhost ~]# last -n 5 | awk '{print KaTeX parse error: Undefined control sequence: \t at position 4: 1 "\̲t̲ ̲lines: "NR"\t c…!

在这里插入图片描述
awk的逻辑运算字符在这里插入图片描述

逻辑运算上面亦即所谓的大于、小于、等于等判断式上面,习惯上是以“ == ”来表示;
如果是直接给予一个值,例如变量设置时,就直接使用 = 而已。


  1. a-z ↩︎

  2. A-Z ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值