正则表达式及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

(0)
pingskypingsky
上一篇 2016-08-08 20:10
下一篇 2016-08-08 20:10

相关推荐

  • 对文件目录操作命令详解

    对文件目录操作命令详解 cd——切换目录 pwd——显示当前工作目录 ls——列出目录内容 touch——创建空文件和刷新时间 stat——查看文件状态 cp——复制文件和目录 mv——移动和重命名文件 rm——删除文件或目录 目录操作 tree 显示目录树 mkdir 创建目录 rmdir 删除空目录 rm -r 递归删除目录树 alias——命令别名 文…

    Linux干货 2016-09-06
  • centos7配置bindDNS解析服务

    首先来概述一下 通俗一点理解呢,DNS就是把域名转换成IP的一种服务(反向则是IP转换成域名).以方便人们的记忆,就好比记住一个代表性的英文要比记住电话号码快得多,通常我们将这种服务称之为解析.现在一般公网都有万网 腾讯云这些机构,DNS这一块我们不需要负责.但是在现在企业的内部网则就需要我们来搭建DNS服务器了.本次采用的bind工具进行域名的解析。 1.…

    Linux干货 2018-03-26
  • N25- linux主机名

    N 由于我是零基础学习linux,学完1-2课时,用心消化中,   先分享我的一个小经验,我用xshell登录系统后一般会打开日志记录功能(文件—-日志——启动),日志功能启动后,会以txt的形式记录下你与系统所有的交互(只会记录系统打印到幕的内容和你输入的命令,并不会记录你与你与运行程序交互时输入的内容)日志功…

    Linux干货 2016-12-03
  • LVM详解

    一、概述     LVM全称为Logical Volume Manager,即逻辑卷管理器。LVM可以弹性的调整文件系统的容量,可以将多个物理分区整合在一起,并且根据需要划分空间或动态的修改文件系统空间。     LVM有两个版本: lvm,lvm2 二、LVM的相关概念   &…

    Linux干货 2015-04-28
  • 不重启添加硬盘

    添加硬盘后 ls /dev/sd* 不重启添加硬盘 [root@localhost ~]# cd /sys/class/scsi_host/ [root@localhost scsi_host]# ls host0  host1  host2 [root@localhost scsi_host]# echo “- – -”…

    Linux干货 2017-10-21
  • 第七周作业

    查看作业内容请移步此链接:http://www.cnblogs.com/wangenzhi/p/6403568.html

    Linux干货 2017-02-15