Linux shell之正则表达式(《Linux与Unix shell编程指南》读书笔记)

1.说明

       本文参考摘录自《Linux与Unix shell编程指南》 


2.基本概念

     当从一个文件命令输出中抽取或过滤文本时,可以使用正则表达式(RE),正则表达式是一些特殊或不很特殊的字符串模式的集合。

      为了抽取或获得信息,我们给出抽取操作应遵守的一些规则。这些规则由一些特殊字符或进行模式匹配操作时使用的元字符组成。也可以使用规则字符作为模式中的一部分进行搜寻。例如,A将查询A,x将查找字母x。

      系统自带的所有大的文本过滤工具在某种模式下都支持正则表达式的使用,并且还包括一些扩展的元字符集。这里只涉及其中之一,即以字符出现情况进行匹配的表达式,原因是一些系统将这类模式划分为一组形成基本元字符的集合。

基本元字符集及其含义

只匹配行首
$
只匹配行尾

只一个单字符后紧跟*,匹配0个或多个此单字符
[ ] 
只匹配[]内字符。可以是一个单字符,也可以是字符序列。可以使用表示[]内字符序列范围,如用[1-5]代替[12345]

只用来屏蔽一个元字符的特殊含义。因为有时在shell中一些元字符有特殊含义。\可以使其失去应有意义

.
只匹配任意单字符
pattern\{n\} 
只用来匹配前面pattern出现次数。n为次数
pattern\{n,\}
只含义同上,但次数最少为n
pattern\{n,m\} 只含义同上,但pattern出现次数在n与m之间


3.使用说明

3.1使用句点匹配单字符

句点“.”可以匹配任意单字符。“.”可以匹配字符串头,也可以是中间任意字符。例:

...x..x..x

3.2在行首以^匹配字符串或字符序列

^只允许在一行的开始匹配字符或单词。例:

^d


^001


可以将各种模式结合使用

^ ...4XC....


//以上模式表示,在每行开始,匹配任意 3个字符,后跟4 X C,最后为任意4个字符。^在正则表达式中使用频繁,因为大量的抽取操作通常在行首。

3.3在行尾以$匹配字符串或字符

可以说$与^正相反,它在行尾匹配字符串或字符,$符号放在匹配单词后。假定要匹配以单词trouble结尾的所有行,操作为:trouble$ 

3.4使用*匹配字符串中的单字符或其重复序列

使用此特殊字符匹配任意字符或字符串的重复多次表达式。例:

10133 *


3.5使用\屏蔽一个特殊字符的含义

假定要匹配包含字符“.”的各行而"."代表匹配任意单字符的特殊字符,因此需要屏蔽其含义。操作如下:

\.

//上述模式不认为反斜杠后面的字符是特殊字符,而是一个普通字符,即句点.

如果要在正则表达式中匹配以.cpp结尾的所有文件,可做如下操作:

*\.cpp

//通过ls -li 验证*\.cpp和*.cpp输出结果一致

3.6使用[]匹配一个范围或集合

       使用[]匹配特定字符串或字符串集,可以用逗号将括弧内要匹配的不同字符串分开,但并不强制要求这样做(一些系统提倡在复杂的表达式中使用逗号),这样做可以增加模式的可读性。使用“-”表示一个字符串范围,表明字符串范围从“-”左边字符开始,到“-”右边字符结束。如果熟知一个字符串匹配操作,应经常使用[]模式。

3.6.1假定要匹配任意一个数字,可以使用:

[0123456789]

然而,通过使用“-”符号可以简化操作:

[0-9]

3.6.2匹配任意小写字母

[a-z]

要匹配任意字母,则使用:

[A-Za-z]

表明从A-Z、a-z的字母范围。

如要匹配任意字母或数字,模式如下:

[A-Za-z0-9]

3.6.3在字符序列结合使用中,可以用[]指出字符范围。假定要匹配一单词,以s开头,中间有一任意字母,以t结尾,那么操作如下:

s[a-zA-Z]t

3.6.4如要匹配Computer或computer两个单词,可做如下操作:

[Cc]omputer

3.6.5要匹配所有包含system后跟句点的所有单词,这里S可大写或小写。使用如下操作:

[S,s] ystem\.

3.6.6注意^符号的使用,当直接用在第一个括号里,意指否定或不匹配括号里内容。

[^a-zA-Z]

//匹配任一非字母型字符

3.7使用\{\}匹配模式结果出现的次数

只要指定次数,就应使用 \ { \ },此模式有三种形式,即:

pattern\{n\} 匹配模式出现n次。

pattern\{n,\} 匹配模式出现最少n次。

pattern\{n,m} 匹配模式出现n到m次之间n,m为0-255中任意整数。

3.7.1匹配字母A出现两次,并以B结尾,操作如下:

A\{2\}B

//匹配值为AAB

3.7.2匹配A至少4次,使用:

A\{4 ,\}B

//可以得结果AAAAB或AAAAAAAB,但不能为AAAB。

3.7.3如给出出现次数范围,例如A出现2次到4次之间:

A\{2 ,4\}B

//则结果为AAB、AAAB、AAAAB,而不是AB或AAAAAB等。

 

4.总结

       在写正则表达式时,可能会有点难度或达不到预期效果,一个好习惯是在写真正的正则表达式前先写下预期的输出结果。这样做,当写错时,可以逐渐修改,以消除意外结果,直至返回正确值。接下来的文章介绍正则表达式在一些文本过滤工具的使用。

网上此书的目录很乱,而且一本书分割为好多文件。我详细整理了目录,并且合并为一个PDF文件。希望对大家有帮助。呵呵,这真的是一本好书《LINUXUNIX SHELL编程指南--------------------------------------------- 经典《LinuxUNIX Shell编程指南shell是一种完整的编程语言,易学易用;shell脚本可以使烦人的手工作业自动化,使你的工作变得简单、轻松!本书通过各种实用的系统管理小技巧和趣味脚本代码,详尽地介绍了shell编程各个不同的方面。学完本书后,你将成为一名shell编程高手。 内容简介 本书共分五部分 ,详细介绍了SHELL编程技巧,各种UNIX命令及语法,还涉及了UNIX的文字处理以及少量的系统管理问题。本书内容全面,文字简洁流畅,适合SHELL编程人员学习、参考。 目录 第一部分 SHELL 第一章 文件安全权限 第二章 使用FIND和XARGS 第三章 后台执行命令 第四章 文件名置换 第五章 SHELL输入输出 第六章 命令执行顺序 第二部分 文本过滤 第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并分割 第十二章 TR用法 第三部分 登录环境 第十三章 登录环境 第十四章 环境和SHELL变量 第十五章 小结 第四部分 基础SHELL编程 第十六章 SHELL脚本介绍 第十七章 条件测试 第十八章 控制流结构 第十九章 SHELL函数 第二十章 向脚本传递参数 第二一章 创建屏幕输出 第二二章 创建屏幕输入 第二三章 调试脚本 第二四章 SHELL嵌入命令 第五部分 高级SHELL编程技巧 第二五章 深入讨论 << 第二六章 SHELL工具 第二七章 几个脚本例子 第二八章 运行级别脚本 第二九章 CGI脚本
非常的全,绝对不会让你后悔。 目 录 译者序 前言 第一部分 shell 第1章 文件安全权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 1.5 目录 7 1.6 suid/guid 7 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何计算umask值 10 1.8.2 常用的umask值 11 1.9 符号链接 12 1.9.1 使用软链接来保存文件的多个映像 12 1.9.2 符号链接举例 12 1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间查找文件 17 2.1.7 查找比某个文件新或旧的文件 17 2.1.8 使用type选项 17 2.1.9 使用size选项 18 2.1.10 使用depth选项 18 2.1.11 使用mount选项 18 2.1.12 使用cpio选项 18 2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 3.1.7 删除crontab文件 25 3.1.8 恢复丢失的crontab文件 25 3.2 at命令 25 3.2.1 使用at命令提交命令或脚本 26 3.2.2 列出所提交的作业 27 3.2.3 清除一个作业 27 3.3 &命令 27 3.3.1 向后台提交命令 28 3.3.2 用ps命令查看进程 28 3.3.3 杀死后台进程 28 3.4 nohup命令 29 3.4.1 使用nohup命令提交作业 29 3.4.2 一次提交几个作业 29 3.5 小结 30 第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1 标准输入 40 5.6.2 标准输出 40 5.6.3 标准错误 40 5.7 文件重定向 40 5.7.1 重定向标准输出 41 5.7.2 重定向标准输入 42 5.7.3 重定向标准错误 42 5.8 结合使用标准输出和标准错误 43 5.9 合并标准输出和标准错误 43 5.10 exec 44 5.11 使用文件描述符 44 5.12 小结 45 第6章 命令执行顺序 46 6.1 使用&& 46 6.2 使用|| 46 6.3 用()和{ }将命令结合在一起 47 6.4 小结 48 第二部分 文本过滤 第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值