Mozart的剑(文本处理工具)——叁剑(grep、正则表达式)

之前的句子

烟锁池塘柳 炮镇海城楼

因荷而得藕 有杏不需梅

认识于小林寒风的一篇小说《凤山遗梦》

grep

grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

作用:文本搜索工具,根据用户指定的模式对目标文本逐行进行匹配检查;打印匹配到的行。模式:由正则表达式字符及文本字符所编写的过滤条件

用法:

grep [OPTIONS] PATTERN [FILE…]

简单示例:

Mozart的剑(文本处理工具)——叁剑(grep、正则表达式)

grep命令选项

–color=auto  :对匹配到的文本着色显示,(CentOS7中“别名”alias中已设置)

-v  :显示不被pattern匹配到的行,反向匹配行。

-i  :忽略字符大小写

-n  :显示匹配的行号

-c  :统计匹配的行数

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

-H, –with-filename当搜索多个文件时,显示匹配文件名前缀

-h–no-filename当搜索多个文件时,不显示匹配文件名前缀

-q  :静默模式,不输出任何信息(注重执行过程,不注重执行的结果)

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

示例:grep –e root –e magedu /etc/passwd

Mozart的剑(文本处理工具)——叁剑(grep、正则表达式)

-w  :匹配整个字符串

-E  :使用ERE,扩展正则表达式egrep

-F  :相当于fgrep,一个换行符分隔的字符串的集合fgrep,不支持正则表达式。

-A#  after,打印匹配本身以及后#行行

-B#  before, 打印匹配本身以及前#行行

-C#  context, 打印匹配本身以及前后各#行行

正则表达式

REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。简单来说,正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串

正则表达式可分为两类:基本正则表达式:BRE,扩展正则表达式:ERE

按元字符分类:字符匹配、匹配次数、位置锚定、分组,根据元字符分类我们一一介绍两类正则表达式。

基本正则表达式BRE

用法:grep [OPTIONS] PATTERN [FILE…]

元字符分类:

1)字符匹配:

. :匹配任意单个字符

[] :匹配指定范围内的任意单个字符

[^] :匹配指定范围外的任意单个字符

[:alnum:] :字母和数字

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

[:lower:] :小写字母[:upper:]大写字母

[:blank:] :空白字符(空格和制表符)

[:space:] :水平和垂直的空白字符(比[:blank:]包含的范围广),任何产生空白的字符。

[:cntrl:] :不可打印的控制字符(退格、删除、警铃))

[:digit:] :十进制数字

[:xdigit:] :十六进制数字

[:graph:] :可打印的非空白字符

[:print:] :可打印字符

[:punct:] :标点符号

2)匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

* :匹配前面的字符任意次,包括零次无限次

.* :任意长度的任意字符

\? :匹配其前面的字符01

\+ :匹配其前面的字符至少1

\{n\} :匹配前面的字符n

\{m,n\} :匹配前面的字符至少m次,至多n

\{,n\} :匹配前面的字符至多n

\{n,\} :匹配前面的字符至少n

3)位置锚定:定位出现的位置

^ :行首锚定,用于模式的最左侧

$ :行尾锚定,用于模式的最右侧

^PATTERN$ :用于模式匹配整行

^$ :空行

^[[:space:]]*$ :空白行

\<或或\b词首锚定,用于单词模式的左侧

\>或或\b词尾锚定;用于单词模式的右侧

\<PATTERN\>匹配整个单词

4)分组:

\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,例如:\(root\)\+

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,…其中涉及后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符(具体用法可查看扩展正则表达式中的举例)

\|:逻辑关系or 或

示例:显示/proc/meminfo文件中以大小s开头的行

Mozart的剑(文本处理工具)——叁剑(grep、正则表达式)

扩展的正则表达式ERE

用法:egrep [OPTIONS] PATTERN [FILE…]  其中:egrep等价于grep –E

元字符分类:

1)字符匹配:

. :任意单个字符

[] :指定范围的字符

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

2)次数匹配:

:匹配前面字符任意次

?  :01

1次或多次

{m}  :匹配m

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

3)位置锚定:

^  :行首

$ :行尾

\<,\b :语首

\>,\b :语尾

4)分组:

():将一个或多个字符捆绑在一起,当作一个整体进行处理,例如:\(root\)\+分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,…,其中涉及后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

示例:后向引用,

显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行。

 cat /etc/grub2.cfg | grep “^\([[:blank:]]\)\{1,\}[^\1]” 

Mozart的剑(文本处理工具)——叁剑(grep、正则表达式)

|:逻辑关系 或 or (相似基本正则表达式)

简单对比一下就会发现,基本正则表达式和扩展正则表达式的区别就在于拓展正则表达中好多符号可以不用加“\”转义字符,除了后向引用“\1\2…”和位置锚定“\b\>…

文本处理工具系列圆满结束,以后发现需要补充的会及时更新,最后的往往是最重要的,此次总结可能存在疏漏,请各位大佬批评指正。

文本处理工具系列<1>http://www.178linux.com/82973       <2>http://www.178linux.com/83083

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

(0)
MozartMozart
上一篇 2017-08-03 11:32
下一篇 2017-08-03 19:36

相关推荐

  • 【26期】Linux第七周学习小总结

        今天给大家的分享是本周的一个有趣的小内容,LVM逻辑卷相关的,为什么分享这个内容呢?主要是刚没有接触或者说深入接触Linux时,有人在群里提问,如果不用虚拟机,那Centos本身有快照吗?当时说的答案很热闹,不过大部分还是倾向于没有快照,本周学习的逻辑卷管理器章节里,就这个问题给了一个准确答案,那我们一起来看一下吧!  …

    2017-08-26
  • Linux之进程和计划任务

    进程的概念     内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、 安全功能等     Process: 运行中的程序的一个副本,是被载入内存的一个指令集合进程ID(Process ID,PID)号码被用来标记各个进程    &nbs…

    Linux干货 2016-10-09
  • Linux基础知识之命令的语法通用格式

    #COMMAND OPTIONS ARGUMENTS 1.COMMAND:   (1)发起一命令:请求内核将某个二进制程序运行为一个进程: 程序–>进程 静态–>动态 (有声明周期)   (2)命令本身是一个可执行的程序文件:二进制格式的文件,有时候会调用共享库文件 多数系统程序文件都存放在:/bin,…

    Linux干货 2016-07-07
  • while循环中的一个常见问题

    在楼主刚刚学习接触while循环的时候,发现了一个问题,在while循环内部对变量赋值、定义变量、数组定义等等环境,在循环外面失效。 一个简单的测试脚本如下: 执行结果证明,$new_var的结果是空值。在google上查了查,才发现问题出在管道上。 先看看下面的内容。 while循环的写法有好几种,它的语法结构为: while test_cmd_list;…

    2017-08-26
  • 文件压缩和软件包管理

    Linux压缩打包 压缩是一种通过特定的算法来减小计算机文件大小的机制。有利于文件在网络上的传输,节约带宽。在Linux中,压缩是以后缀名区分文件的。(Linux中很少见)压缩文件都会呈现醒目的红色。 注意!以下压缩软件只能压缩文件而不能压缩目录。不能对目录直接压缩! compress命令 compress这个命令是非常老旧的一款命令,现在基本已经不用了 而…

    Linux干货 2016-08-24
  • five

    1;显示当前系统上root, fedora或user1用户的默认shell。 #   grep "^\(root\|fedora\|user1\)" /etc/passwd #   grep -E "^(root|fedora|u…

    Linux干货 2017-01-16