正则表达式及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
下一篇 2016-08-08

相关推荐

  • MySQL 多实例详解

    目录 一、基本概念 1、MySQL多实例        就是在一台机器上面开启多个不同的端口,运行多个MySQL服务进程。这些MySQL多实例公用一套安装程序,使用不同的(也可以是相同的)配置文件,启动程序,数据文件。在提供服务时候,多实例MySQL在逻辑上看来是各自独立的,多个实例的自身是根据配置…

    Linux干货 2015-09-23
  • 5.程序包管理与内核命令的使用

    1、  显示/boot/grub/grub.conf中以至少一个空白字符开头的行; ~]#  grep -E “^[[:space:]]+” //boot/grub/grub.conf root (hd0,0) kernel /vmlinuz-2.6.32-279.el…

    Linux干货 2017-07-30
  • Linux磁盘管理(分区,格式化,文件系统、VFS、mount、fstab)

    Linux系统中数据存储在磁盘中,磁盘在冯诺依曼体系中属于输入输出外部存储对象,保存着重要的企业数据,对Linux系统中的磁盘管理尤其需要熟练掌握,由于企业目前使用的主流存储设备还是硬盘,所以这里只叙述硬盘的组织结构; 1.分区:    (1)低级格式化:       硬盘在出厂的时候厂家会做一次分区格式化,…

    Linux干货 2016-09-02
  • 冒泡算法,源码安装http,yum浅谈

    生成10个随机数,采用冒泡算法进行升序或降序排序 #!/bin/bash #author:maoxiong QQ:111111111 #verson:1.0  date:2016-08  #illustrate: declare -a array #create 10 randomnum for num in {0..9} do &nbs…

    Linux干货 2016-08-26
  • Tomcat

        Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。但…

    2017-09-05
  • HA专题: 使用pacemaker+corosync实现MySQL高可用

    HA专题: 使用pacemaker+corosync实现MySQL高可用 前言 实验拓扑 实验环境 实验步骤 准备工作 安装HA组件并配置 配置NFS 配置MySQL 配置HA资源 测试 总结 前言 上篇文章我们介绍了使用pacemkaer+corosync实现简单的nginx高可用, 这篇文章我们介绍如何使用pacemaker+corosync实现MySQ…

    Linux干货 2016-04-11