部分内容参考如下链接
https://www.runoob.com/linux/linux-comm-sed.html?hmsr=toutiao.io

一 、四种正则的用法.?+*

1、 . 匹配任意一个字符

表示点所在位置可以表示任意一个字符,

我们做一个测试文本

cp /etc/passwd  test.txt

在test.txt 行首加一行raao

sed -i '1i'\raao test.txt
grep  'r.o'  test.txt

shell 正则表达式
要想获取raao 行,可以使用
{n} 表示匹配前面字符n次
egrep 'r.{2}o' test.txt
shell 正则表达式

2、 ? 匹配之前的项0次或1次

编辑 test.txt 文件加入三行, rooot,rot,rt

sed -i '1i'\ rooot test.txt
sed -i '1i'\ rot test.txt
sed -i '1i'\ rt test.txt

egrep 'roo?t' test.txt
shell 正则表达式

3、+ 匹配之前的项一次或多次

egrep 'ro+t' test.txt
shell 正则表达式

4、* 匹配之前的项0次或多次

egrep 'ro*t' test.txt

shell 正则表达式

二 、sed用法补充

sed 用法补充
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

1、打印:

打印第一行
sed -n 1p test.txt
打印前两行
sed -n 1,2p test.txt
shell 正则表达式

2、删除:

删除前3行后打印10行
sed 1,3d test.txt |head
shell 正则表达式
查询后删除
sed '/root/d' test.txt |head
shell 正则表达式

3、插入:

可以分为a在当前行的下一行插入,i 在当前行的上一行插入
在文本开头插入
sed '1i'\up test.txt
shell 正则表达式

在文本结尾插入
sed '$a'\down test.txt
shell 正则表达式

4、取代:

取代前4行内容为replace1-4输出
sed '1,4c replace1-4' test.txt
shell 正则表达式

5、替换:

做一个全局替换将nologin替换为longout
sed 's/nologin/longout/g' test.txt
shell 正则表达式
数据查找并替换
ifconfig ens33 |grep '\binet\b' |sed 's/^.*inet//g' |sed 's/netmask.*$//g'
相当于
ifconfig ens33 |grep '\binet\b' |awk '{print $2}'
shell 正则表达式
备注:grep' \b\b'
\b单词锁定符,如: '\binet\b'只匹配inet,相当于-w 选项