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

学习目标:

l  掌握正则表达式的运用

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

目录结构:

 

正则表达式

正则表达式概述

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

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

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

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

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

l  正则表达式层次

基础正则表达式

拓展正则表达式

l  Linux中文本处理工具

grep

sed

awk

正则表达式元字符

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

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

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

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

例:^a, ^the, ^#

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

例:word$

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

例: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的实际运用和巩固强化。

05 shell编程之正则表达式的更多相关文章

  1. Linux学习——shell编程之正则表达式和字符处理命令

    shell编程之正则表达式 一 正则表达式 1 什么是正则表达式 正则表达式用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分隔.匹配.查找及替换操作. 2 shell编程之正则表达式 ...

  2. shell编程之正则表达式

    什么是正则表达式?正则表达式是用于描述字符排列和匹配模式的一种语法规则.在很多程序设计语言中都支持利用正则表达式来进行字符串的操作,不同语言中的正则表达式略有不同,但是毕竟都是正则,其本质思想都是一致 ...

  3. 第5天(半天)【shell编程初步、grep及正则表达式】

    第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...

  4. Linux下的Shell编程

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  5. 转:Linux Shell编程入门

    http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来 ...

  6. Linux 与 unix shell编程指南——学习笔记

    第一章    文件安全与权限 文件访问方式:读,写,执行.     针对用户:文件属主,同组用户,其它用户.     文件权限位最前面的字符代表文件类型,常用的如         d 目录:l 符号链 ...

  7. sed命令详解 vim高级技巧 shell编程上

    第1章 sed命令详解 1.1 查找固定的某一行 1.1.1 awk命令方法 [root@znix ~]# awk '!/oldboy/' person.txt 102,zhangyao,CTO 10 ...

  8. [No000014A]Linux简介与shell编程

    Linux 介绍 内核 库: .so 共享对象,windows:dll 动态链接库 应用程序 Linux的基本原则: 1.由目的单一的小程序组成:组合小程序完成复杂任务: 2.一切皆文件: 3.尽量避 ...

  9. linux shell 编程参考

    #!/bin/bash my_fun() { echo "$#" } echo 'the number of parameter in "$@" is '$(m ...

随机推荐

  1. PHP连接MySQL数据库的几种方式

    PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi :MySQLi 只针对 MySQL 数据库,MySQLi 还提供了 API 接口. PDO (PHP Data Objects ...

  2. ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证

    在前面的创建专辑与编辑专辑的表单中存在一个问题:我们没有进行任何验证.字段的内容可以不输入,或者在价格的字段中输入一些字符,在执行程序的时候,这些错误会导致数据库保存过程中出现错误,我们将会看到来自数 ...

  3. DB2数据库创建数据库操作过程

    /* author simon */ 例:数据库:NCDB2用户 :DB2ADMIN/DB2ADMIN备份库路径:D:/bank 一.恢复数据库1.启动数据库运行->db2cmd->db2 ...

  4. VBA注意事项

    以下是项目过程中遇到的坑,可能有些说明的部分不一定严谨,仅供参考 1.最好保存成 [*.xlsm]文件 2.注意 VBA 的参数类型,使用的参数如果未声明直接使用的话会出现类型不匹配的错误 3.代码写 ...

  5. sql相同记录取时间最大的信息

  6. 《浪潮之巅》(第2版):精彩的IT商战史

    2011年看过第一版.以为看新版会跳过大部分看过的内容,结果发现还是从头到尾看了一遍,2011年看过的内容已经记不太确切了:) 另外IT的历史太精彩了,许多故事都知道,再看还是挺有意思.当然作者的文字 ...

  7. 第一次团队合作,对Scrum的初步了解

    学习和运用scrum 作为长大的大三老腊肉,我们已经在长大生活了两年多,对于什么是长大人最想完善的校园需求.最想拥有的校园服务媒介也有了更加深切的体会. 于是,GoodJob小团队blingbling ...

  8. Swift学习——格式控制符和元组流程控制(二)

    Swift中的格式控制符和元祖 (1)首先介绍一下元祖,元祖是关系型数据库中  比如学生表中的姓名,年龄,电话等 定义例如以下 var studentinfo = ("jhon", ...

  9. jmeter报"msg":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported"的解决方法

    1.报"msg":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supporte ...

  10. c++字符串初始化

    #include<string> string s1 = "abcdefg"; string s2("abcdefg");