Linux文本处理三剑客及正则表达式

该章主要介绍正则表达式的使用方法

9

Linux 文本处理三剑客

grep:文本过滤工具(grep ;  egrep  ; fgrep)

grep :支持标准输入(例如:grep  abc  回车后输入内容,可检测出带有abc的行)

-v  :显示不被patter匹配的行

-i   : 忽略大小写

-n  :显示出行号

-c  :统计匹配的行的数量

-q  :静默模式,不输出任何信息   echo  $?   //可检测出是否查找到信息(0查找到)

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

-A  :显示出包含关键字的后续几行

-B  : 显示出包含关键字的前几行

-C  : 显示出包含关键字的前后几行

-e  :代表或的关系(例如:-e  wang  -e  root   //过滤出wang或mage  的行)

-w  :匹配整个单词

-E   :(egrep)  支持扩展的正则表达式

-F   :(fgrep)  不支持正则表达式

 

正则表达式(REGEXP:(匹配的是字符串)

正则表达式引擎:采用不同算法,检查处理正则表达式的软件模块PCRE

man 7 regex    //查看正则表达式的格式

元字符分类:字符匹配、匹配次数、位置锚定、分组

一.基本正则表达式(BRE

字符匹配

.        匹配任意单个字符

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

[^]     匹配指定范围外的任意一个字符        [:print:]       可打印字符

[:upper:]   任意大写字母            [:blank:]    空白字符(空格和制表符)

[:lower:]   任意小写字母            [:space:]    水平和垂直的空白字符

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

[:alpha:]     任意大小写字母       [:puncct:]    标点符号

[:alnum:]   任意数字或字母        [:graph:]      可打印的非空白字符

grep  -o   [[:digit:]]   /etc/centos-release  |head –n1    //取出centos版本号6或7

 

匹配次数

*    匹配前面的字符任意次,包括0次

.*   匹配任意长度的一个字符

\?   前面的字符重复0次或1次

\+   前面的字符至少1次以上

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

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

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

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

grep  -o  “ [0-9]\+”   /etc/centos-release  |head –n1    //取出版本号

ifconfig ens32  |grep  ” netmask”  | grep -o “[0-9.]\{7,\}” |head -n1   //取出ip地址

ifconfig ens32  |grep  ” netmask”  | grep -o “[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}” |head -n1

ifconfig ens32  |grep -o “inet [0-9.]\+”  |cut -d” ” -f2    //取IP地址

df | grep sda |grep -o “[0-9]\{1,3\}%”|grep -o “[0-9]\+” |sort -nr  |head -n1  //分区

 

位置锚定

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

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

^PATTERN$     用于模式匹配整行

^$   空行

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

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

\>  或  \b  词首锚定,用于单词模式的右侧

\<PATTERN\>   匹配整个单词

grep  -v   ^[[:space:]]*$    f1     //过滤文件的空白行

 

分组:

\(\)  将一个或多个字符捆绑在一起,当做一个整体进行处理

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

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

\|  或   (例如: a\|b     ;   (C\|c)at))

grep “^\(.*\):.*/\1$”  /etc/passwd    //取出前后单词一样的行

 

二.扩展正则表达式(ERE)

次数匹配

*    匹配前面字符任意次

?    0或1次

+   1次或多次

{m}   匹配m次

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

位置锚定

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

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

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

\>  或  \b  词首锚定,用于单词模式的右侧

分组:

()将一个或多个字符捆绑在一起,当做一个整体进行处理

后向引用:  \1  ,  \2

或 者: (例如: a|b     ;   (C|c)at))

echo /etc/rc.d/init.d/functions  |egrep -o  “[^/]*/?$”   //取基名

[0-9]       0-9

[1-9][0-9]      10-99

1[0-9][0-9]      100-199

2[0-4][0-9]       200-249

25[0-5]           250-255

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

(1)
qljqlj
上一篇 2018-04-06 20:02
下一篇 2018-04-06 20:28

相关推荐

  • Linux任务计划、周期性任务执行

    Linux任务计划、周期性任务执行 at at命令用于在指定时间执行命令。执行结果会通过邮件发送给用户 at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行 语法 at(选项)(参数) atq: 查询任务列表 atrm: 删除指定任务 选项 -f:指定包含具体指令的任务文件;…

    Linux笔记 2018-04-03
  • MySQL之日志管理

    MySQL数据库中支持多种日志类型,通过分析日志,我们可以优化数据库性能,排除故障,甚至能够还原数据,本节内容将带你了解MySQL数据库中的日志管理

    2018-06-12
  • 网络管理基础

    1.PDU: Protocol Data Unit,协议数据单元是指对等层次之间传递的数据单位 物理层的 PDU是数据位 bit 数据链路层的 PDU是数据帧 frame 网络层的PDU是数据包 packet 传输层的 PDU是数据段 segment 其他更高层次的PDU是消息 message 2.TCP特性工作在传输层 面向连接协议 全双工协…

    Linux笔记 2018-05-02
  • N31第二周

    1、Linux上的文件管理类命令都有哪些,其常用的方法及其相关示例演示: mkdir mkdir:创建目录 格式:mkdir [OPTION]… DIRECTORY… -m –mode=模式,设定权限<模式> (类似 chmod)  -p 此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录, 即一次可以建立多…

    2018-06-26
  • shell练习

    1、检查磁盘使用率,如果分区利用率大于80%(此处实验以15%)就执行警报   echo “The disk check script will be starting”sleep 0.5 disk_used=`df |grep “^/dev/sd”|tr -s ” ” %|c…

    2018-05-07