部分内容参考如下链接
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.txtgrep \'r.o\' test.txt
要想获取raao 行,可以使用
{n} 表示匹配前面字符n次
egrep \'r.{2}o\' test.txt
2、 ? 匹配之前的项0次或1次
编辑 test.txt 文件加入三行, rooot,rot,rt
sed -i \'1i\'\\ rooot test.txtsed -i \'1i\'\\ rot test.txtsed -i \'1i\'\\ rt test.txt
egrep \'roo?t\' test.txt
3、+ 匹配之前的项一次或多次
egrep \'ro+t\' test.txt
4、* 匹配之前的项0次或多次
egrep \'ro*t\' test.txt
二 、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
2、删除:
删除前3行后打印10行
sed 1,3d test.txt |head
查询后删除
sed \'/root/d\' test.txt |head
3、插入:
可以分为a在当前行的下一行插入,i 在当前行的上一行插入
在文本开头插入
sed \'1i\'\\up test.txt
在文本结尾插入
sed \'$a\'\\down test.txt
4、取代:
取代前4行内容为replace1-4输出
sed \'1,4c replace1-4\' test.txt
5、替换:
做一个全局替换将nologin替换为longout
sed \'s/nologin/longout/g\' test.txt
数据查找并替换
ifconfig ens33 |grep \'\\binet\\b\' |sed \'s/^.*inet//g\' |sed \'s/netmask.*$//g\'
相当于
ifconfig ens33 |grep \'\\binet\\b\' |awk \'{print $2}\'
备注:grep\’ \\b\\b\’
\\b单词锁定符,如: \’\\binet\\b\’只匹配inet,相当于-w 选项