zoukankan      html  css  js  c++  java
  • 05 shell编程之正则表达式

    正则表达式&&文本处理利器

    学习目标:

    l  掌握正则表达式的运用

    l  掌握sed、awk文本处理工具的使用

    目录结构:

     

     

    正则表达式

    正则表达式概述

    l  正则表达式:使用单个字符串来描述,匹配一系列符合某个句法规则的字符串

    l  由普通字符与特殊字符组成

    l  一般用在脚本编程,文本编辑器中,如php、Python、shell等,简写为regex、regexp、RE

    l  用来检索、替换符合模式的文本,具有强大的文本匹配功能

    l  能够在文本海洋中快速高效地处理文本

    l  正则表达式层次

    基础正则表达式

    拓展正则表达式

    l  Linux中文本处理工具

    grep

    sed

    awk

    正则表达式元字符

    l  基础正则表达式是常用的正则表达式部分

    l  除了普通字符外,常见到以下元字符

    :转义字符,使符号就是符号,不存在其他含义。!, 等

    ^:匹配字符串开始的位置

           例:^a, ^the, ^#

    $:匹配字符串结束的位置

           例:word$

    .:匹配除 之外的任意的一个字符

           例:go.d , g..d

    *:匹配前面子表达式0次或者多次

           例:goo*d,go*d

    [list]:匹配list列表中的一个字符

           例:go[ola]d , [abc], [a-z], [a-z0-9]

    [^list]:匹配任意不在list列表中的一个字符

           例:[^a-z], [^0-9], [^A-Z0-9]

    {n,m}:匹配前面的子表达式n到m次,有{n}, {n,}, {n,m}三种格式

           例:go{2}d, go{2,3}d, go{2,}

    扩展正则表达式元字符

    l  扩展正则表达式是对基础正则表达式的扩充深化

    l  扩展元字符

    +:匹配前面子表达式1次以上

           例:go+d, 将匹配至少一个o

    ?:匹配前面子表达式0次或者1次

           例:go?d, 将匹配gd或者god

    ():将括号中的字符串作为一个整体

           例:(xyz)+, 将匹配xyz整体1次以上,如xyzxyz

    |:以或的方式匹配字条串

           例1:good|food,将匹配good或者food

           例2:g(oo|la)d,将匹配good或者glad

    Sed工具实践

    sed工具概述

    l  sed是文本处理工具,读取文本内容,根据指定的条件进行处理,如删除,替换,添加等

    l  可在无交互的情况下实现相当复杂的文本处理操作

    l  被广泛应用于shell脚本,以完成自动化处理任务

    l  Sed依赖于正则表达式

    Sed用法举例

    l  替换举例

    sed ‘s/xml/XML/’ bfile  //将每行中的第一个xml替换为XML

    sed ‘s/xml//g’ bfile  //将文件中所有xml删除

    sed ‘3,5s/xml/XML/g’ bfile  //将第3-5行中的所有xml都替换为XML

    sed ‘/xml/s/com/COM/g’ bfile  //将包含xml的所有行中的com都替换为COM

    l  多次执行编辑命令

    sed -e ‘3,5p’ -e ‘3,5s/xml/XML/g’ bfile  //可将多个编辑命令保存到文件中,通过-f指定文件,以完成多个处理操作

    这只是sed和正则表达式的结合使用的部分案例

    有关sed的具体使用详见https://www.cnblogs.com/zwgblog/p/6013975.html

    awk工具实践

    awk工具介绍

    l  awk也是一个功能强大的编辑工具,与sed一样,可在无交互的情况下实现相当复杂的文本操作

    l  命令格式

    awk 选项 ‘模式或条件{编辑指令}’ 文件1 文件2

    awk -f 脚本文件 文件1 文件2

    l  工作原理

    逐行读取文本,默认以空格为分隔符进行分割,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令

    l  awk 内置变量

    FS:指定每行文本的分隔符,缺省为空格或制表位

    NF:当前处理的行的字段个数

    NR:当前处理的行的行号(序数)

    $0:当前处理的行的整行内容

    $n:当前处理行的第n个字段(第n列)

    awk工具举例

    l  打印文本内容

    awk ‘NR==1,NR==3{print}’ bfile  //输出第一至第三行内容

    awk ‘NR==1|NR==3{print}’ bfile  //输出第一行,第三行内容

    awk ‘/^root/{print}’ /etc/passwd  //输出以root开头的行

    l  按字段输出文本

    awk ‘{print $1,$3}’ bfile  //输出每行中的第1,第3个字段

    awk -F “:” ‘{print$1,$7}’ /etc/shadow  //输出密码为空的用户的shadow记录

    同理awk的具体介绍详见http://blog.chinaunix.net/uid-23302288-id-3785105.html

    至此shell编程的基本知识都已经了解完毕了,详见博主主页 http://www.cnblogs.com/tzlsj。shell编程博大精深,擅长处理各种文件,与Linux的一切皆文件的特点十分契合。

    现在了解的shell知识点犹如四则运算法则,看似很简单,实则各种组合变化。接下来我会给大家找一些好玩的小脚本,进行shell的实际运用和巩固强化。

  • 相关阅读:
    查看object信息
    Google C++单元测试框架之宏
    Google C++单元测试框架
    通过iscsi协议使用ceph rbd
    OpenStack+Ceph存储空间回收《转》
    IO
    golang之interface
    mysql 初始化
    ceph之ceph osd tree下的weight, reweight
    c++单元测试框架googletest
  • 原文地址:https://www.cnblogs.com/tzlsj/p/9170319.html
Copyright © 2011-2022 走看看