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

相关推荐

  • Virtualization虚拟化技术介绍

    Virtualization即虚拟化技术,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率

    2018-07-27
  • Linux文件权限详解

    Linux系统中不仅是对用户与组根据UID,GID进行了管理,还对Linux系统中的文件,按照用户与组进行分类,针对不同的群体进行了权限管理,用他来确定谁能通过何种方式对文件和目录进行访问和操作。

    2018-04-04
  • 第八周

    总结

    Linux笔记 2018-05-20
  • HTTP协议介绍

    HTTP协议(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

    2018-06-19
  • vim的使用方法

    从命令模式到插入模式的几种方法 i 光标不移动 I 光标移动到光标所在行首 a 光标往后移动一个字符 A 光标移动到光标所在行尾 o 光标所在行下新增一行 O 光标所在行上新增一行 扩展模式: :q 退出 :q! 强制退出,丢弃做出的修改 :wq 保存退出 :x 保存退出 :wq! 对只读文件强行修改保存 :r file 把文件内容读入到当前文件中 :w …

    Linux笔记 2018-08-05
  • Linux第一周命令总结

    hostname  完整主机名  cat +文件路径 可查看文件信息 cat /etc/centos-release 查看文件  版本的名称、发行时间所有shell cat/etc/shells  显示当前系统使用的 lsd_release -a  命令  查看版本 /etc/centos-release 是文本文件  cat是查看文本的命令 uname-r…

    2018-07-22