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 17:45
下一篇 2018-04-07 19:16

相关推荐

  • 磁盘存储个文件管理

    设备文件I/O Ports:I/O设备地址一切接文件:调用函数open(), read(), write(), close()设备类型:块设备:block,存取单位”块”,磁盘字符设备:char,存取单位”字符”,键盘设备文件:关联至一个设备驱动程序,进而都够跟与之对应硬件设备进行通信设备号码:主设备号:标识设备类型次设备号:标识同一类型下的不同设备mkno…

    2018-04-25
  • linux第五周

    RPM简介 RPM类似于Windows系统中.exe的软件安装程序,用户可以使用它自行安装和管理Linux上的应用程序和系统工具; RPM软件包文件都是以.rpm为后缀,一般采用这样的命名格式:软件包名称 – 版本号 – 修正版 . 硬件平台 . rpm。 RPM命令的使用方法 rpm命令:rpm [OPTIONS] [PACKAGE_FILE 安装:-i,…

    Linux笔记 2018-07-22
  • Blog Day 1:在Windows下搭建Linux学习环境

    By:Alvin Lin
    No:M30-43
    Date:2018-04-01

    -目录-
    第零部分:安装VMware Workstations 12 虚拟机软件程序(Windows平台)
    第一部分:创建虚拟机
    第二部分:安装CentOS6.9
    第三部分:安装CentOS7.4

    2018-04-01
  • 初识VIM和正则表达式

    vim和正则表达式练习

    Linux笔记 2018-05-31
  • Linux的哲学思想

    Linux的哲学思想: 1.一切皆文件 linux中所有的东西都可文件来描述,设备以文件形式描述,内核以及内核运行时变量都以虚拟文件的形式记录。因此必须有一套文件目录规范(FHS :Filesystem Hierarchy Standard文件层级标准http://refspecs.linuxfoundation.org/)来规定一些基本的目录,来保证不同的…

    Linux笔记 2018-05-11
  • 第一周作业笔记

    1、描述计算机的组成及其功能。
    2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。
    3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。
    4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例来阐述。
    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的。
    6、请罗列Linux发行版的基础目录名称命名法则及功用规定

    Linux笔记 2018-06-21