正则表达式

来源:互联网 发布:分区表丢失数据恢复 编辑:程序博客网 时间:2024/06/06 09:57

概述:

《跟阿铭学linux》,几乎任何软件都会涉及到正则表达式,它一种匹配模式,下面linux相关的正则表达式工具grep,sed,awk

1、grep/egrep

语法:grep [-cinvABC] 'word'  filename

-c : 打印符号要求的行数

-i :忽略大小写

-n :在输出符号要求的行的同时连同行号一起输出

-v : 打印不符合要求的行

-A : 后跟一个数字(例如-A2则表示打印符号要求的行以及下面两行)

-B :后跟一个数字 (例如-B2表示打印符合要求的行以及上面两行)

-C : 后面一个数字 (例如-C2则表示打印符合要求的行以及上下各两行)

grep -A2 'halt' /etc/passwd   (搜索‘halt’字符,然后打印该字符对应的行以及下面两行)

grep -B2 'halt' /etc/passwd   (搜索‘halt’字符,然后打印该字符对应的行以及上面两行)

grep -C2 'halt' /etc/passwd    (搜索‘halt’字符,然后打印该字符对应的行以及上下各两行)


1、过滤出带有某个关键词的行,并输出行号

2、过滤不带有某个关键词的行,并输出行号


3、过滤出所有包含数字的行

grep '[0-9]' /etc/passwd

4、过滤出所有不包含数字的行

grep -v '[0-9]' /etc/passwd   (-v表示反选)

5、把所有以‘#’开头的行去除


6、去掉所有空行和以‘#’ 开头的行

 grep -v '^#' /etc/crontab | grep -v '^$'


这正则表达式中,‘^’表示行的开始, ‘$’表示行的结尾, 那么空行则可以表示'^$'表示

不以英文字符开头

grep '^[^a-zA-Z]'  文件名   (其中【^字符】表示不以括号的字符开头)

7、过滤任意一个字符与重复字符


8、指定要过滤字符出现的次数


{n1, n2} n1<n2,表示重复n1到n2次前面的字符,n2还可以为空,则表示大于等于n1次

egrep用法

1、筛选一个或一个以上前面的字符


2、筛选零个或一个前面的字符


3、筛选字符串1或者字符串2


4、egrep中()的应用

用()表示一个整体,例如(oo)+ 就表示一个‘oo’或者多个‘oo’


2、sed工具的使用

查询替换功能

1、打印某行



打印出来可以使用sed -n '1,$'p 文件名


也可以指定一个区间:


2、打印包含某个字符串的行

[root@iz8vb7cc5e91muwr6fxp3jz test]# sed -n '/^o/'p /etc/passwdoperator:x:11:0:operator:/root:/sbin/nologin[root@iz8vb7cc5e91muwr6fxp3jz test]# sed -n '/$in/'p /etc/passwd[root@iz8vb7cc5e91muwr6fxp3jz test]# sed -n '/in$/'p /etc/passwdbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologin

总结:

  • 1、格式为:/搜素内容/
  • 2、其它正则表达式同grep

3、-e可以实现多个行为(也就是可以查找多个条件采用|)


4、删除某行或者多行

建立一个test.txt文件内容为

1111111222222233333334444444

sed '1,3d' test.txt 表示删除1到3行数据,然后将结果输入到控制台

5、替换字符或字符串


sed 's/[0-9]//g' test.txt (将数字替换为空)

6、调换两个字符串的位置。

其实就是把一行作为一个整体,分割多份,然后互换位置


原创粉丝点击