Linux正则表达式三剑客(grep sed awk)基本用法

   ##                                      正则表达式三剑客(grep  sed awk)基本用法
正则表达式(Regual Expression,REGEXP):由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能。是一套规则和方法,工作时以行为单位进行,一次处理一行,化繁为简,提高工作效率。仅受Linux三剑客(grep sed awk)使用,其它命令无法使用。

正则表达式的分类

1、基本正则表达式BRE: 匹配字符 、匹配字数 、位置锚定。

符号 作用
^ 尖角号,用于模式的最左侧,如“^oldboy”,匹配以oldboy单词开头的行
$ 美元符,用于模式的最右侧,如“oldboy&”,表示以oldboy结尾的单词行
^$ 组合符,表示空行
. 匹配任意一个且只有一个字符,不能匹配空行
\ 转义字符,让特殊含义的字符,显出原形还原本意,例如\ .代表小数点
* 匹配前一个字符(连续出现)0次或1次以上,重复0次代表空,即匹配所有内容
.* 组合符,匹配所有内容
^.* 组合符匹配任意多个字符开头的内容
.*$ 组合符匹配任意多个字符结尾的内容
[abc] 匹配[]集合内的任意一个字符,a或b或c,可以写为[a-c]
[^abc] 匹配除了后面的任意字符,a或b或c,表示对[abc]的取反

2、扩展正则表达式ERE

字符 作用
+ 匹配前一 个字符一次或多次
[😕]+ 匹配括号内的“:”\“ 字符一次或多次
? 匹配前一个字符0次或多次
\ 表示或者,同时过滤多个字符串
() 分组过滤,被括起来的内容表示一个整体
a 匹配前一个字符最少n次,最多m次
a 匹配前一个字符最少n次
a 匹配前一个字符正好n次
a 匹配前一个字符最多n次

grep 擅长单纯的查找或匹配文本内容

参数选项
-v 排除匹配结果
-n 显示匹配行与行号
-i 不区分大小写
-c 只统计匹配的行数
-E 使用Egrep命令
--color=auto 为grep过滤结果添加颜色
-w 只匹配过滤的单词
-o 只匹配输出的内容

grep基本使用方法

找出所有m开头的行

 ]#grep -i -n "^m.*"  luffy.txt 

找出结尾的行

]#grep -n " \ .$"  luffy.txt

找出所有允许登录的用户,解释器为/bin/bash/的行

]#grep -i -n ".\/bin\/bash$"  pwd.txt 

 ]#grep -n "/bin/bash$"   pwd.txt 

找出系统/tmp中的txt文件,且名字里包含a或b的字符

]#find  /tmp  -name "*.txt" |grep -E "t|e"

找出文件中good     glad的行

]#grep -E "g(oo|la)d"  test.txt 

sed 更适合编辑、处理匹配到的文本内容

参数选项 解释
-n 取消默认sed的输出,常与sed内置命令p一起用
-i 直接将修改结果写入文件,不用-i,sed修改的是内存数据
-e 多次编辑,不需要管道符
-r 支持正则扩展

sed的内置命令符 用于对文件进行不同的操作功能,如对文件增删改查

sed常用 内置命令符

sed的内置命令符 解释
a append,对文本追加,在指定行后面添加一行/多行文本
d Delete,删除匹配行
i insert,表示插入文本,在指定行前添加一行/多行文本
p Print,打印匹配行的内容,通常p与-n一起用
s/正则/替换内容/g 匹配正则内容,然后替换内容(支持正则),结尾g代表全局匹配

sed匹配范围

范围 解释
空地址 全文处理
单地址 指定文件某一行
/pattern/ 被模式匹配到的每一行
范围区间 10,20 十到二十行, 10,+5第十行向下5行,/pattern/,/pattern/
步长 1~2,表示1,3,5,7,9 2~2两个步长,表示2,4,6,8

sed基本使用方法

输出第2,3行信息

 sed  -n '2,3p'  pwd.txt

过滤出含有root的字行

sed   -n  "/root/p"  pwd.txt

删除有关root的行

sed "/root/d"   pwd.txt 

将文件中的root 替换成 beet

 sed  "s/root/beet/p"  pwd.txt -n        全局替换  sed  "s/root/beet/gp"  pwd.txt -n

将文件中的root替换成beet      同时把games替换为stay

sed   -e  "s/root/beet/p"  -e  "s/games/stay/p"  pwd.txt -n

在文件第二行下追加内容  白日依山尽 字符

sed  "2a 白日依山尽"  pwd.txt 

在文件第4行上追加2两行内容  更上一层楼  欲穷千里目  字符

sed "4i 更上一层楼\n欲穷千里目" pwd.txt

取出Linux  IP 地址

ifconfig ens33|sed "2s/^.*inet//p"   |sed "2s/netm.*$//p" -n 

ifconfig ens33|sed -e  "2s/^.*inet//" -e  "2s/net.*$//p" -n
posted @ 2020-12-26 20:50  迎风飘扬的蓝色碎花  阅读(229)  评论(0编辑  收藏  举报