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

相关推荐

  • 系统启动和内核管理之系统启动实验

    本文主要记录:内核文件损坏导致系统无法启动的修复过程

    2018-05-07
  • Linux 第一週作業 (6.18–6.24)

    计算机的组成及其功能
    罗列Linux的发行版
    Linux的哲学思想
    一些簡單命令
    如何在Linux系统上获取命令的帮助信息
    Linux发行版的基础目录名称命名法则及功用规定

    Linux笔记 2018-06-23
  • Linux作业管理,并行运行,任务计划(at任务和cron任务)

    本文主要介绍:1、Linux作业管理 2、并行运行 3、任务计划(at 一次性任务和 cron 周期性任务)

    2018-05-06
  • 简述sed常用操作命令,并举例

    sed命令: 文本处理三剑客: grep,egrep,fgrep:文本过滤器 sed:stream EDitor,刘编辑器,行 awk:文本格式化工具,报告生成器 sed [option]…’script’ [input-file]… script: 地址定界编辑命令 常用选项: -n:不输出模式空间中的内容至…

    Linux笔记 2018-06-07
  • IP 命令使用

    ip 1.作用ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfig、route等,使用权限为超级用户。几乎所有的Linux发行版本都支持该命令。 2.格式ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]] 3.主要参数OPTIONS是修改ip行为或改变其输出的选项。所…

    Linux笔记 2018-05-05
  • 网络管理——基础篇

    网络管理 什么是网络 一组网络设备通过各种媒介实现信息资源共享 资源共享的功能和优点 数据和应用程序 资源 网络存储 备份设备 常见网络设备 路由器 交换机 网卡 RJ-45接口网线 光纤网线 网络应用程序 Web 浏览器(Chrome、IE、Firefox等) 即时消息(QQ、微信、钉钉等) 电子邮件(Outlook、foxmail 等) 协作(视频会议、…

    2018-04-28