正则表达式及grep用法总结

描述:

grep: Global search REgular expression and Print outthe line.

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;

模式:由正则表达式字符及文本字符所编写的过滤条件

语法格式:grep [OPTIONS] PATTERN [FILE…]

OPTIONS(选项):

 – -color=auto:  对匹配到的文本着色显示;

 -v:  显示不能够被pattern 匹配到的行

 -i:  忽略字符大小写

 -n:显示匹配的行号

 -c:  统计匹配的行数

 -o:  仅显示匹配到的字符串;

 -q:  静默模式,不输出任何信息

 -A #: after,  

 -B #: before,  

 -C # context,  前后各

 -e :实现多个选项间的逻辑or 关系

 -w :整行匹配整个单词

 -E :使用ERE(扩展正则表达式)

PATTERN(模式):结合正则表达式

正则表达式:

 REGEXP :由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,

       而表示控制或通配的功能

程序支持:grep, vim, less,nginx等等

基本正则表达式:BRE

扩展正则表达式:ERE

grep -E, egrep

正则表达式引擎:采用不同算法,检查处理正则表达式的软件模块

PCREPerl Compatible Regular Expressions

元字符分类:字符匹配、匹配次数、位置锚定、分组

QQ图片20160805165843.png

QQ图片20160805165850.pngQQ图片20160805165900.png示例:

1,查找特定字符串‘the'

[root@localhost ~]# grep -n 'the' regular_express.txt 
8:I can't finish the test.
12:the symbol '*' is represented as start.

2,反向查找特定字符串’the'

[root@localhost ~]# grep -vn 'the' regular_express.txt

3,查找不论大小写的字符串'the'

[root@localhost ~]# grep -in 'the' regular_express.txt 
8:I can't finish the test.

4,查找test或taste这两个单词的字符串

[root@localhost ~]# grep -n 't[ae]st' regular_express.txt 
8:I can't finish the test.
9:Oh! The soup taste good.

5,查找含有'oo'字符串

[root@localhost ~]# grep -n 'oo' regular_express.txt 
1:"Open Source" is a good mechanism to develop programs.
18:google is the best tools for search keyword.
19:goooooogle yes!

6,查找除a-z以外的,包含'oo’的字符

[root@localhost ~]# grep '[^a-z]oo' regular_express.txt 
Football game is not use feet only.

其中:[:alnum:]表示英文大小写字符及数字,即0-9,A-Z,a-z

    [:alpha:]表示任何英文大小写字符,即A-Z,a-z

    [:digit:]表示数字,即0-9

    [:lower:]表示小写字符,即a-z

    [:upper:]表示大写字符,A-Z

    [:space:]表示任何空白字符

7,查找字符串'the'开头的行

[root@localhost ~]# grep '^the' regular_express.txt 
the symbol '*' is represented as start.

8,查找非字母开头的行

[root@localhost ~]# grep -n '^[^[:alpha:]]' regular_express.txt 
1:"Open Source" is a good mechanism to develop programs.
21:# I am VBird

9,查找以.结尾的行

[root@localhost ~]# grep -n '\.$' regular_express.txt 
1:"Open Source" is a good mechanism to develop programs.
2:apple is my favorite food.

10,查找空白行

[root@localhost ~]# grep -n '^$' regular_express.txt 
22:

11,查找开头是g而结尾是d,中间包含两个字符串的行

[root@localhost ~]# grep -n 'g..d' regular_express.txt 
1:"Open Source" is a good mechanism to develop programs.
9:Oh! The soup taste good.
16:The world <Happy> is the same with "glad".

12,查找字符串开头与结都是g,但两个g之间仅能存在至少一个o的行,即gog,goog,goooog

[root@localhost ~]# grep -n 'goo*g' regular_express.txt 
18:google is the best tools for search keyword.
19:goooooogle yes!

13,查找g开头与g结尾的字符串,当中的字符可有可无,即g,gg,ggg,gggg

[root@localhost ~]# grep -n 'g*g' regular_express.txt 
14:The gd software is a library for drafting programs.
19:goooooogle yes!

14,查找符合'g…g'的需求的行

[root@localhost ~]# grep -n 'g.*g' regular_express.txt 
14:The gd software is a library for drafting programs.
20:go! go! Let's go.

15,查找两个o的字符串

[root@localhost ~]# grep -n 'o\{2\}' regular_express.txt 
2:apple is my favorite food
19:goooooogle yes!

16,查找g后面接2到5个o,然后再接一个g的字符串

[root@localhost ~]# grep -n 'go\{2,5\}g' regular_express.txt 
18:google is the best tools for search keyword.

17,查找2个o以上的字符串

[root@localhost ~]# grep -n 'go\{2,\}g' regular_express.txt 
18:google is the best tools for search keyword.
19:goooooogle yes!

18,锚定单词:列出含有root的行的信息

[root@localhost ~]# grep '\<root\>' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

egrep及扩展的正则表达式

语法格式:egrep [OPTIONS] [PATTERN] [FILE…]

      egrep =grep -E

扩展正则表达式的元字符:

字符匹配:

  .  任意单个字符

 [ ] 指定范围内的字符

 [^] 不在指定范围内的字符

次数匹配:

  * 匹配前面字符任意次

  ? 匹配0次,1次,可有可无

  + 匹配至少一次 

 {m} 匹配m次

 {m,n} 至少m次,至多n次

位置锚定:

   ^ 行首

   $ 行尾

   \<,\b 词首

   \>,\b 词尾

分组:(),  向后引用:\1,\2,…

[root@localhost ~]# echo "11.11.12.12" |egrep "([0-9]{1,3})\.\1\.([0-9]{1,3})\.\2"
11.11.12.12

或者:a|b

示例:

1,显示用户root 或mage 或wang 的信息

[root@localhost ~]# grep -E '^(root\>|mage\>|wang\>)' /etc/passwd
root:x:0:0:root:/root:/bin/bash
mage:x:511:518::/home/mage:/bin/bash
wang:x:512:519::/home/wang:/bin/bash


cat命令:查看文件内容

语法格式:cat [OPTION]… [FILE]…

       -E:  显示行结束符$

       -n:  对显示出的每一行进行 编号

       -A: 显示所有控制符

       -b: 非空行编号

       -s 压缩连续的空行成一行

[root@localhost ~]# cat -nE test
     1He loves his lover.        He likes his lover.$
     2She likes her liker.       She lovers her liker.$

more命令:分页查看文件内容

语法格式:more [OPTIONS…] FILE…

       -d:  显示翻页及退出提示

[root@localhost ~]# more /etc/rc.d/init.d/functions

less命令:一页一页地查看文件或STDIN 输出

      /文本  搜索文本

      n/N 跳到下一个或上一个匹配的结果

      less 命令是man 命令使用的分页器

[root@localhost ~]# cat /etc/passwd |less


head命令:显示文本前行的内容
语法格式:head [OPTION]… [FILE]…

        -c #:  指定获取前# 字节

        -n #:  指定获取前#行 行

        -#:  指定行数

[root@localhost ~]# head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

tail命令:显示后行的内容

语法格式:tail [OPTION]… [FILE]…

      -c #:  指定获取后# 字节

       -n #:  指定获取后#行 行

       -#:  指定行数

       -f:  跟踪显示文件新追加的内容,常用日志监控

[root@localhost ~]# tail -f test          在另外一个终端以root用户登录,执行echo “123” >>test,即可显示结果
He loves his lover. He likes his lover.
123


cut命令:按列抽取文本内容

语法格式:cut [OPTION]… [FILE]…

       -d DELIMITER:  指明分隔符,默认tab

       -f FILEDS:

           #:  # 个字段

           #,#[,#] :离散的多个字段,例如1,3,6

           #-# :连续的多个字段,  例如1-6

           混合使用:1-3,7

       -c 按字符切割

       –output-delimiter=STRING  指定输出分隔符

       显示文件或STDIN 数据的指定列

[root@localhost ~]# cut -d: -f1,3,7 /etc/passwd    常用选项,取出用户的名字,UID和默认shell
root:0:/bin/bash
bin:1:/sbin/nologin

paste命令 合并两个文件同行号的列到一行

语法格式:paste [OPTION]… [FILE]…

        -d  分隔符: 指定分隔符,默认用TAB

        -s :  所有行合成一行显示


wc命令:统计文本数据

[root@localhost ~]# wc /etc/fstab
 12:行数  60:字数   595:字符数  /etc/fstab

  -l  统计行数

  -w  统计单词数

  -c  统计字节数

  -m  统计字符数


sort命令:文本排序(把整理过的文本显示在STDOUT),不改变原始文件

语法格式:sort [options] file(s)      

     -r 执行反方向(由上至下)整理

     -n   执行按数字大小整理

     -f    选项忽略(fold )字符串中的字符大小写

     -u   选项(独特,unique )删除输出中的重复行

     -t c    选项使用c 做为字段界定符

     -k X    选项按照使用c 字符分隔的X 列来整理能够使用多次

示例:将/etc/rc.d/init.d/function文件按单词进行排序

[root@localhost ~]# cat /etc/rc.d/init.d/functions |tr -sc '[:alpha:]' '\n' |sort -n

uniq命令:从输入中删除重复的前后相接的行  (常和sort  命令一起配合使用)

语法格式:uniq [OPTION]… [FILE]…

        -c:  统计每行重复出现的次数

        -d:  显示重复过的行

        -u:  仅显示不曾重复的行连续且完全相同方为重复

示例:将/etc/rc.d/init.d/function文件统计出现次数最多的单词

[root@localhost ~]# cat /etc/rc.d/init.d/functions |tr -sc '[:alpha:]' '\n' |sort |uniq -c |sort -n |tail -1
     67 pid       (这是CentOS 7)

[root@localhost ~]# cat /etc/rc.d/init.d/functions |tr -sc '[:alpha:]' '\n' |sort |uniq -c |sort -n |tail -1
     83 if      (这是CentOS 6)

diff命令:比较两个文件的不同

语法格式:diff [OPTION]… FILES
diff命令的输出被保存在一种叫做“补丁”的文件中

使用-u选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件

  

patch命令:向文件打补丁

[root@localhost ~]# diff fstab.old fstab.new
1,2d0      表示第一行和第二行被删除了,
<          表示第一行的内容
< #          表示第二行的内容
12a11,12     表示在原来的第12行后增加了两行,命令为11,12
> 
> new line

要结合-b选项来自动备份改变了的文件

[root@localhost ~]# echo old >old
[root@localhost ~]# echo new >new
[root@localhost ~]# diff -u old new >patch
[root@localhost ~]# rm -f old
[root@localhost ~]# patch -b -R new patch
patching file new
[root@localhost ~]# cat new
old
[root@localhost ~]# mv new old
[root@localhost ~]# cat old
old




原创文章,作者:pingsky,如若转载,请注明出处:http://www.178linux.com/30112