AI智能
改变未来

shell 正则表达式

部分内容参考如下链接
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 选项

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » shell 正则表达式