频道栏目
首页 > 系统 > Linux > 正文

正则介绍_grep上、中、下

2018-08-22 14:06:57           
收藏   我要投稿

9.1 9.2 9.3正则介绍_grep上、中、下

一、 grep

正则就是一串有规律的字符串 掌握好正则对于编写shell脚本有很大帮助 各种编程语言中都有正则,原理是一样的 本章将要学习grep/egrep、sed、awk

grep/egrep命令

grep命令:过滤出指定关键字的行; 格式:grep [参数] ‘字符’ filename grep -n 显示符号要求的行,并显示行号 grep -c 打印符合要求的行数 grep -v 打印不符合要求的行,取反的意思 grep -r 会把目录下的所有文件全部遍历;-r针对的是目录,如果不加-r只能针对文件 grep -i 忽略大小写 grep -A2 打印符合要求的行以及下面两行 grep -B2 打印符合要求的行以及上面两行 grep -C2 打印符合要求的行以及上下两行 grep -w 匹配一个完整的单词 grep -E 特殊符号脱意==egrep centos7中自带 --color显示颜色 ; grep 跟特殊符号的话,要用单引号 grep --include 包含 grep -l 只打印出含有匹配字符串的文件名,不输出具体匹配行的数据

过滤出包含root字符的行。

\

grep –n 过滤出包含root的行,并显示行号;

\

test.txt中包含root字符的一共有几行。

\

过滤出不包含nologin的行;

\

grep –i 不区分大小写

\

\

grep –A2 打印符合要求的行以及下面两行;

\

grep –B2 打印符合要求的行以及上面两行;

\

grep –C2 打印符合要求的行以及这行上下各两行;

\

grep/egrep示例:

grep -n 'root' test.txt grep -nv 'nologin' test.txt grep '[0-9]'/etc/inittab grep -v '[0-9]'/etc/inittab grep -v '^#' /etc/inittab grep -v '^#' /etc/inittab|grep -v '^$' grep '^[^a-zA-Z]' test.txt grep 'r.o' test.txt grep 'oo*' test.txt grep '.*' test.txt grep 'o{2}' /etc/passwd egrep 'o{2}' /etc/passwd egrep 'o+' /etc/passwd egrep 'oo' /etc/passwd egrep 'root|nologin' /etc/passwd egrep '(oo){2}' /etc/passwd [0-9]:这里的方括号,表示方括号里面的任意一个字符;只要有一个数字,不管是几,就算符合要求。

过滤出包含数字的行 ; grep '[0-9]' test1.txt

\

过滤出所有不包含数字的行; grep -nv 'nologin' test.txt

\

过滤出不以#开头的行,方便查看某个文件的配置

\

过滤出不以#或者开头的行不包括空行

\

过滤出不以字母开头的行

\

过滤出不包含特殊符号的行

\

正则里面的特殊符号

1 . 表示 任意一个字符 2 * 表示 零个或多个前面的字符 3 .* 表示零个或多个任意字符,空行也包含在内;以r开头o结尾。 4 ? 表示0个或者1个前面的字符,使用的时候要\ 脱意一下 5 + 表示一个或者多个+前面的字符 6 | 在正则表达式里面表示或者,可以写多个,是特殊符号,要使用脱意 或者-E 或者 egrep

9.4/9.5 sed

sed命令比grep更强大,除了拥有查找功能外,还拥有替换功能 sed命令格式:sed -n 'n'p filename ,单引号内的n是数字,表示第几行; sed 可以实现grep的大部分功能 ,但是不显示颜色 sed -n 是打印符合条件的行,p是print打印的意思 sed -r 脱义(去除特殊符号本身的意义,使其代表特殊意义) sed -e 进行多次命令,和;效果一行 sed '/[0-9]'d 2.txt d表示删除不包含数字的行;不是真正的删除,是不显示,相当于grep -v 取反 sed -n '/root/'Ip I 不区分大小写 sed -i ' [0-9]'d 2.txt -i 是真正删除掉文档里面不包含数字的行;一半不建议使用。 正则中 | 表示或者,并且要sed两次表示 sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' 1.txt 以:为分割符,将第一段和最后一段互相替换,\1表示第一个()内容,\2表示第二个()内容,\3表示第三个内容。 sed -r 's/(.*)/aaa:&/g' 1.txt

sed实例1:

sed -n '5'p test.txt sed -n '1,5'p test.txt sed -n '1,$'p test.txt sed -n '/root/'p test.txt sed -n '/^1/'p test.txt sed -n 'in$'p test.txt sed -n '/r..o/'p test.txt sed -n 'oo*'p test.txt sed -e '1'p -e '/111/'p -n test.txt

查找指定行

打印第5行;

\

打印第1-5行;

\

打印全部内容可以用(1,$)表示;内容太多,就不显示全部内容。

\

查找指定字符串的行

查找带有root字符的行;字符要用/ /括起来。

\

查询的内容也可以是正则; 查找以l开头的行

\

查找以/login结尾的行;注意:这里需要将/login前面的/脱意一下。

\

查找包含r.o

\

打印带有数字的行

\

打印以数字开头的行

\

sed –e 可以进行多次命令;

\

删除某些行

sed实例2:

sed '1'd test.txt sed '1,3'd test.txt sed '/oot/'d test.txt 删除第1行\ 删除第1-3行

\

删除带有ab字符的行

\

sed替换功能

sed 's/[0-9]/a/g' 1.txt //将所有数字替换成a sed 's/root/ROOT/g' 1.txt //将文件1.txt中root全部换成ROOT sed '1,10s/root/ROOT/g' 1.txt //将文件1.txt前10行中root全部替换成ROOT paste 1.txt 2.txt //将1.txt的内容和2.txt内容连在一起 sed -i '30,40s/^.*$/#&/g' 1.txt //前面加入加上#注释掉 sed -i 's/^/#/g' 1.txt //前面加入加上#注释掉 s 是替换的意思,g为全局替换,否者就替换一次,/可以用#@来替换字符

sed实例3:

sed '1,2s/ot/to/g' test.txt sed 's#ot#to#g' test.txt sed 's/[0-9]//g' test.txt sed 's/[a-zA-Z]//g' test.txt sed -r 's/(rot)(.*)(bash)/\3\2\1/' test.txt sed 's/^.*$/123&/' test.txt sed -i 's/ot/to/g' test.txt 将1到2行中ot替换成to

\

/可以用#或者@来替换

\

将数字全部删除

\

只保留数字

\

删除所有字母

\

以:为分割,将第一段和最后一段调换位置;+ 在里面是特殊符号,要脱意 用 -r

\

\

;分号可以进行多次匹配

\

-e 进行多次命令,和;效果一行

\

在每一行前面加上aaa: &表示前面()的内容

\

\1 表示前面()的内容

\

-i 会直接更改文件本身的内容

\

9.6/9.7 awk

awk也是流式编辑器,针对文档中的行和段进行操作 awk可以分为几个部分: 匹配字符或者字符串 截取文档中的某一段 条件操作符 数学运算 内置变量

实例1:

head -n2 test.txt|awk -F ':' '{print $1}' head -n2 test.txt|awk -F ':' '{print $0}' awk -F ':' '{print $1"#"$2"#"$3"#"$4}' awk '/oo/' test.txt awk -F ':' '$1 ~/oo/' test.txt awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test.txt awk -F ':' '$3=="0"' /etc/passwd awk -F ':' '$3>="500"' /etc/passwd awk -F ':' '$3>=500' /etc/passwd awk -F ':' '$7!="/sbin/nologin"' /etc/passwd

匹配字符或者字符串

匹配root的行

\

awk可以做到匹配某一段中的某个字符,以:分隔,匹配第一段中带有root的行

\

awk匹配字符可以使用正则

\

awk自带脱意功能,grep脱意需要-E或者egrep,sed脱意需要-r选项

\

grep -E

\

sed –r

\

截取文档中的某一段

awk –F '分隔符' 如果不指定分隔符,默认会以空格或者空白字符分隔。

打印第一段

\

打印全部内容;$0表示全部内容

\

打印第1段~第4段

\

注意:这里打印出来了第1到第4段,但是内容没有分隔符,这里我们加个分隔符,分隔符要以双引号引起来;后面我们会介绍一个变量OFS来进行分隔。

\

awk可以支持多个匹配

匹配到root打印第1和第3段,匹配到user打印第1,第3,第4段。

\

|在正则里面表示或者

打印出匹配到root或者user的行

\

||也是并且的意思,但是用法还是有一点区别。

\

条件操作符

== 等于,精确匹配 >大于 >= 大于等于 < 小于 <= 小于等于 != 不等于

打印出第3段等于0的行

\

打印出第3段大于等于500的行

\

注意'500'和"500"区别:双引号引起来的500会把它当成字符,会按照阿斯玛排序,单用号引起来的500是数字。

\

打印出第7段不/sbin/nologin的行

\

并且&&和或者||

\

或者||

\

两个字段进行运算

\

awk内置变量

awk常用的变量有OFS,NR和NF OFS 用来指定分隔符号 NR 表示行数 NF 表示段数

指定#为分隔符

\

用awk打印前5行,并显示行号

\

用awk打印20行以后的行,并显示行号

\

awk中可以使用if判断

\

awk中的数学运算

awk可以更改段值

将第一段全部更改为root

\

awk可以计算某个段的值

求第3段和

\

打印出第一段是root的行

\

相关TAG标签 正则 grep grep sed
上一篇:Pythonweb开发框架flask简介
下一篇:linux之Apache服务管理案例
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站