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 除了普通字符外,常见到以下元字符
\:转义字符,使符号就是符号,不存在其他含义。\!,\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编程之正则表达式的更多相关文章
- Linux学习——shell编程之正则表达式和字符处理命令
shell编程之正则表达式 一 正则表达式 1 什么是正则表达式 正则表达式用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分隔.匹配.查找及替换操作. 2 shell编程之正则表达式 ...
- shell编程之正则表达式
什么是正则表达式?正则表达式是用于描述字符排列和匹配模式的一种语法规则.在很多程序设计语言中都支持利用正则表达式来进行字符串的操作,不同语言中的正则表达式略有不同,但是毕竟都是正则,其本质思想都是一致 ...
- 第5天(半天)【shell编程初步、grep及正则表达式】
第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...
- Linux下的Shell编程
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- 转:Linux Shell编程入门
http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来 ...
- Linux 与 unix shell编程指南——学习笔记
第一章 文件安全与权限 文件访问方式:读,写,执行. 针对用户:文件属主,同组用户,其它用户. 文件权限位最前面的字符代表文件类型,常用的如 d 目录:l 符号链 ...
- sed命令详解 vim高级技巧 shell编程上
第1章 sed命令详解 1.1 查找固定的某一行 1.1.1 awk命令方法 [root@znix ~]# awk '!/oldboy/' person.txt 102,zhangyao,CTO 10 ...
- [No000014A]Linux简介与shell编程
Linux 介绍 内核 库: .so 共享对象,windows:dll 动态链接库 应用程序 Linux的基本原则: 1.由目的单一的小程序组成:组合小程序完成复杂任务: 2.一切皆文件: 3.尽量避 ...
- linux shell 编程参考
#!/bin/bash my_fun() { echo "$#" } echo 'the number of parameter in "$@" is '$(m ...
随机推荐
- javascript: iframe switchSysBar 左欄打開關閉,兼容各瀏覽器操作
<html> <head> <meta content="text/html; charset=utf-8" http-equiv="Con ...
- SENNA
SENNA is a software distributed under a non-commercial license, which outputs a host of Natural Lang ...
- linux定期任务cron
做个给服务器定期检测的python程序,要python跑起来自己检测时间再执行?我想到了用cron服务. 遇到了个问题python没写绝对路径,没有执行,改了绝对路径就好了.其实人家配置文件开头写了个 ...
- 02_SimpleTrigger
[SimpleTrigger的构造方法] SimpleTrigger(String name,String group); //指定Trigger的所属组 和 名称 SimpleTrigger(Str ...
- lLinux安装JDK
1.在Linux中新建文件夹 mkdir /usr/local/java 2.上传jdk-7u55-linux-i586.tar到Linux中 3.解压文件 tar xzvf jdk-7u55-l ...
- Scope_Pre_Post
@Scope , 设置bean的生命周期,示例: @Scope(value="prototype")//设置生存范围,一般用 singleton或prototype 14.@P ...
- vector/list/set/map 遍历耗时统计
#include<Windows.h> #include <iostream> #include<fstream> #include<vector> # ...
- centos6.5升级python2.7
请看我的有道云笔记链接: http://note.youdao.com/noteshare?id=777179c98876147537288489e963b7db&sub=71D56E2269 ...
- ZooKeeper 典型应用场景-Master选举
master选举 1.使用场景及结构 现在很多时候我们的服务需要7*24小时工作,假如一台机器挂了,我们希望能有其它机器顶替它继续工作.此类问题现在多采用master-salve模式,也就是常说的主从 ...
- 课堂笔记——循环语句-for
一.循环:多次执行某段代码. 二.循环四要素: 1.初始条件 2.循环条件 3.状态改变 4.循环体 三.for循环 1.语法: for(初始条件;循环条件;状态改变) { 循环体 } 2 ...