Linux文本处理命令grep及正则表达式

Linux文本处理命令grep及正则表达式

一、grep

1、grep概述

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

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

2、命令格式

grep [选项] 模式 [文件…]

案例:打印passwd文件中root用户的信息

1

3、grep选项

选项 功能
–color=auto 对匹配到的文本着色显示
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号,此处的行号时该内容在原文件中的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A 输出满足条件的前几行,比如grep –B 3 “aa” file表示在file中输出有aa的行,同时还要输出aa的前三行
-B 输出满足条件的后几行
-C # 相当于同时用-A –B,即前后都输出
-e 实现多个选项间的逻辑or关系grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 相当于egrep 支持扩展的正则表达式
-F 相当于fgrep,不支持正则表达式

 

二、正则表达式

1、正则表达式及概述

(1)概述:由一类特殊字符及文本字符所编写的模式,用来在文件中匹配符合条件的字符串,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。

(2)正则表达式Linux中支持的程序

grep,sed,awk,vim, less,nginx,varnish等

2、基本的正则表达式

(1)字符匹配:

字符 功能 字符 功能
. 匹配任意单个字符 [] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符 [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:alnum:] 字母和数字 [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符) [:space:] 水平和垂直的空白字符
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…) [:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符 [:print:] 可打印字符
[:punct:] 标点符号

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

符号 功能
* 匹配前面的字符任意次,包括0次贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次

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

符号 功能
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定;用于单词模式的右侧
\<PATTERN\> 匹配整个单词

(4)分组:将一个或多个字符捆绑在一起,当作一个整体进行处理分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3,

\1 :表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

示例:\(string1\+\(string2\)*\)

\1 :string1\+(string2\)*

\2 :string2

后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身

三、正则表达式及grep的使用案例

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

2

SwapCached:           12 kB

SwapTotal:       2097148 kB

或者grep -E “^(s|S)” /proc/meminfo

grep “^[Ss]”  /proc/meminfo

2、显示/etc/passwd文件中不以/bin/bash结尾的行

3

3、显示用户lp默认的shell程序

4

或者cat /etc/passwd | grep “\<lp\>” | cut -d”:” -f7

4、找出/etc/passwd中的两位或三位数

5

或者:cat /etc/passwd | grep -o “\<[0-9]\{2,3\}\>”

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

6

6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行

7

7、显示CentOS7上所有系统用户的用户名和UID

8

8、找出/etc/passwd用户名同shell名的行

9

或者 grep “^\([[:alnum:]]\+\):.*\1$” /etc/passwd

9、利用df和grep,取出磁盘各分区利用率,并从大到小排序

10

 

四、egrep及扩展正则表达式及使用案例

1、egrep的正则表达式及元字符

元字符 功能 元字符 功能
^ 行首定位符 $ 行尾定位符
. 匹配出换行外的单个字符 * 匹配0个或多个前导字符
[] 匹配指定字符组内任一字符 [^] 匹配不在组内任一字符
+ 匹配一次或多次 匹配0此或1次
a|b 匹配a或者b {m} 匹配m次
{m,n} 至少m,至多n次 \<, \b 语首
\>, \b 语尾 () 分组

2、egrep使用案例

(1)显示三个用户root、mage、wang的UID和默认shell

11

(2)找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

12

(3)使用egrep取出/etc/rc.d/init.d/functions中其基名

13

(4)使用egrep取出/etc/rc.d/init.d/functions的目录名

14

(5)显示ifconfig命令结果中所有IPv4地址

15

(6)将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面

16

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95314

(0)
ponypony
上一篇 2018-04-07
下一篇 2018-04-07

相关推荐

  • shell脚本进阶部分

    脚本进阶:条件语句、循环语句等(不包括linux安装部分)

    2018-05-13
  • Ansible简介与实验

    ansille简单实现keepalived一主一备

    2018-08-08
  • 软件包的管理课程

    软件运行和编译  ABI:Application Binary Interface Windows与Linux不兼容 ELF(Executable and Linkable Format) PE(Portable Executable) 库级别的虚拟化: Linux: WINE Windows: Cygwin  API:Application Progr…

    2018-04-29
  • Elastic Stack(ELK)介绍及相关示例实验

    Elastic Stack是一套支持数据采集、存储、分析、展现的全流程数据分析工具,旧时称作ELK(Elasticsearch,Logstash,Kibana的缩写,)。Elastic Stack由一系列的工具集组成,Logstash & Beats:数据采集工具,logstash适合大批量数据的采集,其结构较重,消耗资源较大,适合集群化部署。

    2018-07-31
  • MongoDB Replica Set & Sharding

    记得风吹起的零散记忆 ,堆砌着巧克力般的幸福甜蜜,那时一起走过的青草绿地 ,留下了锦瑟音里的万千思绪

    2018-04-10
  • Linux-文本工具

    文件查看 文件查看命令: cat,tac,rev cat [OPTION]… [FILE]… -E: 显示行结束符$ -n: 对显示出的每一行进行编号 -A:显示所有控制符 -b:非空行编号 -s:压缩连续的空行成一行 tac     行号反转 rev     同行反转   抽取文本的工具 文件内容:less和 cat 文件…

    2018-04-08