Linux文本处理三剑客之grep

Linux文本处理三剑客之grep

正则表达式
扩展正则表达式
文本过滤grep

一、正则表达式

  • 正则表达式:REGEXP(Regular Expressions):由元字符及文本字符编写的模式(pattern)
  • 正则表达式:用来检索、替换符合某个模式的文本
  • 元字符:不表示字符的字面意义,而表示控制和通配功能
  • 元字符分类:字符匹配、匹配次数、位置锚定、分组
  • 程序支持:grep,sed,awk,vim, less,nginx,varnish等
  • 正则表达式引擎:采用不同算法,检查处理正则表达式的软件模块
    PCRE(Perl Compatible Regular Expressions)
  • 正则表达式帮助手册:man 7 regex
1、字符匹配
    . :任意单个字符
    []:任意范围内的单个字符
   [^]:任意范围外的单个字符
   [:digit:]数字
   [:alpha:]字母
   [:lower:]小写字母
   [:upper:]大学字母
   [:alnum:]字母数字
   [:space:]水平和垂直的空白字符(比[:blank:]包含的范围广)
   [:blank:]空白字符(空白和制表符)   
   [:punct:]标点符号
   [:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
   [:digit:] 十进制数字 
   [:xdigit:]十六进制数字
   [:graph:] 可打印的非空白字符
   [:print:] 可打印字符

2、匹配次数:用在指定次数的字符后面,用于表示字符出现的次数
   * : 任意次,包括0次
       贪婪模式:尽可能多的匹配
   \?:至多一次;0次或者1次
   \+:至少一次;一次以上
   \{n\}  :匹配前面的字符n次
   \{n,m\}:至少n次,至多m次
   \{,m\} :至多m次
   \{n,\} :至少n次

3、位置锚定:定位字符出现的位置
    ^ :首(pattern的最左侧)
    $ :尾(pattern的最右侧)
   \< :词首
   \> :词尾
   \b :词首或词尾

4、分组
   \( \):将多个字符捆绑在一起,作为一个整体

   后向引用:   \1:第一个分组
               \2:第二个分组
   \( \)从左至右,第一个'('和与之对应的')'为第一个分组;以此类推
   Note:后向引用的的前面pattern所匹配的内容

   或者: \|
       C\|cat :表示C或cat
   \(C\|c\)at :表示 Cat 或 cat

一、扩展正则表达式

1、字符匹配
    . :任意单个字符
    []:任意范围内的单个字符
   [^]:任意范围外的单个字符
  
2、匹配次数:用在指定次数的字符后面,用于表示字符出现的次数
   * : 任意次,包括0次
       贪婪模式:尽可能多的匹配
   ?:至多一次;0次或者1次
   +:至少一次;一次以上
   {n}  :匹配前面的字符n次
   {n,m}:至少n次,至多m次
   {,m} :至多m次
   {n,} :至少n次

3、位置锚定:定位字符出现的位置
    ^ :首(pattern的最左侧)
    $ :尾(pattern的最右侧)
   \< :词首
   \> :词尾
   \b :词首或词尾

4、分组
   ( ):将多个字符捆绑在一起,作为一个整体

   后向引用:   \1:第一个分组
               \2:第二个分组
   ( )从左至右,第一个'('和与之对应的')'为第一个分组;以此类推
   Note:后向引用的的前面pattern所匹配的内容

   或者: |
     C|cat:表示C或cat
   (C|c)at:表示 Cat 或 cat

二、grep

  • Linux文本处理三剑客
    grep:文本过滤(模式:pattern)工具
    sed:stream editor,文本编辑工具
    awk:Linux上的实现gawk,文本报告生成器
  • grep: Global search REgular expression and Print out the line
  • 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行
  • 原理:依次从文本中读入一行至grep的内存空间按照pattern中表示的字符串进行检索;匹配到pattern表示的字符串就打印
  • Usage: grep [OPTION]… PATTERN [FILE]…
option:
    -o:仅显示匹配到的字符串
    -i:忽略字符大小写
    -A #:after,后#行
    -B #:before,前#行
    -C #:context,前后#行    
    -E:egrep,使用扩展正则表达式
    -F:fgrep,不支持正则表达式
    -m #:匹配多少次之后停止
    -f file:根据模式文件处理
    -v:显示不被pattern匹配的行
    -q:静默模式,不关心匹配输出,只关心是否匹配到时使用
    -n:显示匹配的行号
    -e:实现多个pattern之间的或关系
    -w:匹配整个单词
    --color=auto: 对匹配到的文本着色显示
Linux中单词的分隔符:除字母、数字、下划线之外,其余的符号都算单词分隔符
grep的特殊示例:
    1、[.*?]:此时表示 . * ? 字符本身的含义!字符放在[]中表示字符本身的含义,不表示元字符。
练习:
1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
2、显示/etc/passwd文件中不以/bin/bash结尾的行
3、显示用户rpc默认的shell程序
4、找出/etc/passwd中的两位或三位数
5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
6、找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行
7、显示CentOS7上所有UID小于1000以内的用户名和UID
8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行
9、利用df和grep,取出磁盘各分区利用率,并从大到小排序

1、显示三个用户root、mage、wang的UID和默认shell
2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
4、使用egrep取出上面路径的目录名
5、统计last命令中以root登录的每个主机IP地址登录次数
6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
7、显示ifconfig命令结果中所有IPv4地址
8、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值