关于正则表达式的一些符号和sed、awk的速查笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CHEndorid/article/details/83032349

之前转载了一篇文章详细讲解正则表达式,传送门:https://blog.csdn.net/CHEndorid/article/details/82932455,本文针对一些常用的进行梳理,并添加sed、awk简单的操作,作为一个速查笔记

//里的就是正则表达式

^表示行的开始,$表示行的结尾,^$表示空行

.表示任意一个字符,*表示零个或多个*前面的那一个字符,.*表示零个或多个任意字符

grep ‘o\{2\}’ /etc/passwd中,{}为特殊符号,需要加转义字符\,所以就成了\{\},{}里的2表示前面的o要重复的次数2。{}还可以表示范围,{n1,n2}表示重复n1到n2的次数

egrep中,{}可以直接用,不用加转义字符\

+表示一个或多个+前面的那一个字符

sed -n '数字'p filename,表示打印文件的第几行,-n表示只显示我们要打印的行

sed -n '/字符/' filename,表示打印文件中有“字符”的行

扫描二维码关注公众号,回复: 4708022 查看本文章

sed -e可以实现多个行为

sed '数字'd filename,删除第几行

sed '行数1,行数2s/A/B/g' filename,参数s表示替换动作,替换的行是行1、2,以行为单位,将文件中的A替换为B。g表示对全局进行替换,否则只会替换本行的第一个。/还可以换成#或@,所以也有sed '行数1,行数2s#A#B#g' filename,sed '行数1,行数2s@A@B@g' filename

[0-9]表示任意数字,[a-zA-Z]表示字母,[0-9a-zA-Z]

#这条贴代码是因为CSDN给我解析了
sed 's/\(rot\)\(.*\)\(bash\)/\3\2\1/' filename

调换rot和bash的顺序,\3\2\1分别表示前面()里的字符串。\数字是正则表达式的后项引用。别看着乱,因为()是特殊字符,所以加了转义\,加上-r就可以不用转义字符sed -r 's/(rot)(.*)(bash)\/3/2/1' filename

sed 's/^.*$/123&/' filename,&表示匹配到的字符,这里就是^.*$,这句话的意思是给文档的每一行前面添加123

附上一篇sed介绍的文章:Sed 介绍和教程https://www.cnblogs.com/cbscan/articles/2277351.html

head -n2 test.txt | awk -F ':' '{print $1}',-F表示指定分隔符,不加的话就以空格或者tab为分隔符。print为打印动作,打印某个字段,$1表示第1个字段,$2表示第2个,但是$0表示整行哦

print可以打印自定义符号,但是自定义的内容要用双引号括起来

awk '/oo/' test.txt,表示打印匹配oo字符的行

awk -F ':' '$1 ~ /oo/' test.txt,表示第一段去匹配oo,匹配到了就打印行,~就是匹配的意思

awk -F ':' '$3=="0"' /etc/passwd,表示第三段等于0的,==还可以换成>、>=、<、<=、!=等,和数字比较时,要把数字用双引号引起来

awk的常用变量,OFS,定义输出的分隔符,如head -5 /etc/passwd | awk -F ':' '{OSF="#"} {print $1,$3,$4}',就会输出root#0#0之类的。NF表示用分隔符分隔后一共有多少段,$NF表示最后一段的值,NR表示行号。

END是awk特有的语法,表示所有的行都已经执行。

猜你喜欢

转载自blog.csdn.net/CHEndorid/article/details/83032349
今日推荐