sed & awk常用正则表达式
正则表达式元字符
正则表达式中有两种基本元素:
- 以字面值或变量表示的值(如.代表任意单个字符)。
- 操作符(如*代表将前面的字符重复任意次)。
元字符汇总
特殊字符 |
用途 |
. |
匹配除换行符以外的任意单个字符。在awk中,句点也能匹配换行符。 |
* |
匹配任意一个(包括零个)在它面前的字符(包括由正则表达式指定的字符) |
[…] |
匹配方括号中的字符类中的任意一个。如果方括号中第一个字符为脱字符号(^),则表示否定匹配,即匹配出了换行符和类中列出的哪些字符以外的所有字符。在awk中,也匹配换行符。连字符(-)用于表示字符的范围。如果类中的第一个字符为右方括号(])则表示它是类的成员。所有其他的元字符在被指定为类中成员时都会失去它们原来的含义。 |
^ |
如果作为正则表达式的第一个字符,则表示匹配行的开始。在awk中匹配字符串的开始,即使字符串包含嵌入的换行符。 |
$ |
如果作为正则表达式的最后一个字符,则表示匹配行的结尾。在awk中匹配字符串的结尾,即使字符串包含嵌入的换行符。 |
\{n,m\} |
匹配它前面某个范围内单个字符出现的次数(包括由正则表达式指定的字符)。\{n,m\}将匹配n次出现,\{n,\}至少匹配n次出现,而且\{n,m\}匹配n和m之间的任意次出现。 |
\ |
转意随后的特殊字符。 |
+ |
匹配前面的正则表达式的一次或多次出现。 |
? |
匹配前面的正则表达式的零次或一次出现。 |
| |
指定可以匹配其前面的或后面的正则表达式。 |
() |
对正则表达式分组 |
{n,m} |
匹配它前面某个范围内单个字符出现的次数(包括由正则表达式指定的字符)。{n}表示匹配n次出现,{n,}表示至少匹配n次出现,{n,m}匹配n和m之间的任意次出现。 |
普遍存在的反斜杠
元字符反斜杠(/)将元字符转换成普通字符(或将普通字符转换成元字符)。它强制将任意元字符解释为普通字符,一边匹配该字符本身。
在sed中,使用反斜杠将一组普通字符转意为元字符。
如 \(\) \{\} \n
字符类
字符类是对通配符概念的改进。我们可以列出要匹配的字符,而不是匹配特殊位置的任意字符。使用方括号元字符([])将字符列表括起来,其中每个字符占据一个位置。
注意:在方括号中元字符会失去它们的含义。
如[Ww]hat可以匹配what或者What
字符类中的的特殊字符:
字符 |
功能 |
\ |
转义任意特殊字符(只用于awk中) |
- |
当它不再第一个或最后一个位置时,表示一个范围。 |
^ |
仅当在第一个位置时表示反转匹配。 |
反斜杠只在awk中是特殊的,因此可以使用字符类"[a\]1]"以匹配一个a、一个]或一个1。
如果闭括号(])是作为类中的第一个字符出现(或者是脱字符后的第一个字符),那么它就被解释为类的一个成员。如果连字符在一个类中是第一个或最后一个字符,则失去其特殊含义。因此,为了匹配算术操作符,我们在下面的实例中将连字符(-)放在第一位:
[-+*/]
使用正则表达式匹配下面的日期,该日期可能有下面两种格式:
MM-DD-YY
MM/DD/YY
下面的正则表达式指示每个字符位置可能的树枝范围:
[0-9][0-9][-/][0-3][0-9][-/][0-9][0-9]
"-"或"/"都可能是定界符。在第一个位置防止连字符确保它在字符类中解释为字面意义,即作为一个连字符,而不是指示一个范围。
排除字符类
通常,字符类包括在哪个位置想要匹配的所有字符。在类中作为第一个字符的脱字符(^)将类中所有字符都排除在被匹配之外。相反,除换行符以外没有在列的方括号中的任意字符都将被匹配。
下面的模式将匹配任意非数字字符:
[^0-9]
它匹配字面表中所有的大写和小写字面以及所有特殊字符,例如标点符号。
POSIX字符类补充
POSIX标准对正则表达式字符和操作符的含义进行了形式化。这种标准定义了两类正则表达式:基本的正则表达式(BRE),grep和sed使用这种正则表达式;扩展的正则表达式,egrep和awk使用这种正则表达式。
POSIX还改变了常用的属于,我们一直成为"字符类"的东西在POSIX标准中成为"括号表达式"。在括号表达式中,出了字面字符(例如a, !等)以外,还可以由其他标记。如:
- 字符类。由[:和:]包围的关键字组成的POSIX字符类。关键字描述了不同的字符类,如文字字符类,控制字符等等。
- 整理复合。整理复合是多字符的序列。表示这些字符应该被看作是一个单元,它由[,和.]包围的字符组成。
- 等价类。等价类列出了应该看作是等价的字符集,它由地区化的字符元素(有[=和=]包围)组成。
所有这3种结果都必须出现在括号表达式的方括号中。例如[[:alpha:]!]匹配任意单个字幕字符或感叹号,[[.ch.]]匹配整理元素ch,但不止匹配字幕c或字幕h。
POSIX字符类:
[:alnum:] |
可打印的字符(包括空白字符) |
[:alpha:] |
字母字符 |
[:blank:] |
空格和制表符 |
[:cntrl:] |
控制字符 |
[:digit:] |
数字字符 |
[:graph:] |
可打印和可见的(非空格)字符 |
[:lower:] |
小写字符 |
[:print:] |
可打印的字符(包括空包字符) |
[:punct:] |
标点符号字符 |
[:space:] |
空白字符 |
[:upper:] |
大写字符 |
[:xdigit:] |
十六进制数字 |
定位元字符
有两个元字符用于指定字符串出现在行首或行末的上下文。脱字符^表示行开始,$表示行结束。
可以使用两个联系的定位元字符来匹配空行,即:
^$
可以使用这种模式计算文件中的空行数,在grep中使用计数选项-c:
# grep –c '^$' ch04
5
如果想使用sed来删除空行,那么这个正则表达式很有用。下面的正则表达式可以用于匹配空行,即使其中包含空格:
^□*$
同样,可以使用以下表达式匹配整个行:
^.*$
在sed(和grep)中,只有当"^"和"$"分别出现在正则表达式的开始或结尾才是特殊的。因此"^abc" 意味着 "匹配只处于行开始处的字母a、b和c",而"ab^c"以为着"匹配处于行的任意位置的a、b、字面意义的^,然后是c"。这对于"$"同样适用。
在awk中则不同,"^"和"$"总是特殊的,即使它们可能使编写的正则表达式不匹配任何东西。可以说,在awk中,当想要匹配字面"^"或"$"时,不管它处于正则表达式的什么位置都应该使用反斜杠对其进行转义。
字符的跨度
在grep和sed中使用\{和\}。POSIX egrep 和 POSIX awk使用{和}。在任何情况下,大括号包围一个或两个参数。
\{n,m\}
n和m是0到255之间的整数。如果只指定\{n\}本身,那么将精确匹配前面的字符或正则表达式的n次出现。如果指定\{n,m\},那么就匹配出现的次数为n和m之间的任意次数。
选择性操作
竖线(|)元字符是元字符扩展集的一部分,用于指定正则表达式的联合。如果某行匹配其中的一个正则表达式,那么它就匹配该模式。
分组操作
圆括号()用于对正则表达式进行分组并设置优先级。它们是元字符扩展集的一部分。假设在文本文件中将公司的名称为"BigOne"或"BigOneComputer",使用正则表达式:
BigOne(Computer)?
将匹配字符串"BigOne"本身或者后面跟有一个字符串"□Computer"的形式。同样,有些属于有时会用全拼,有时会用缩写、则可以使用:
# egrep "Lab(oratorie)?s" mail.list
Bell Laboratories, Lucent Technologies
Bell Labs
可以用竖线和圆括号来对选择性操作进行分组。在下面的示例中,使用它来指定单词"company"的单数或复数匹配。
compan(y|ies)
注意:大多数sed和grep 的版本中不能对加圆括号的一组字符应用数量词,但是在egrep和awk的所有版本都是可以的。
限制范围
一个正则表达式为:
A.*Z
匹配的结果为
All of us, including Zippy, our dog
All of us, including Zippy and Ziggy
All of us, including Zippy and Ziggy and Zelda
下划线的字符串表示匹配的字符串,即.*在每种情况下都会匹配可能的最长的范围。
正则表达式尝试匹配最长的字符串,这可能会引起意想不到的问题。例如,下面的正则表达式与引号中的任意个字符匹配:
".*"
输入字符串为:
.Se "Appendix" "Full Progarm Listings."
要匹配第一个参数,可以用下面的正则表达式来描述:
\.Se ".*"
然而,因为模式中的第二个引号与该行上的最后一个引号匹配,所以它结束匹配整个行。如果知道参数的个数,那么可以对每个进行说明:
\.Se ".*" ".*"
虽然这种方法可以像期望的那样工作,但是每行也许不会有相同书目的参数,省略你只想要第一个参数。这里有一个匹配两个引号之间最短范围的正则表达式:
"[^ "]*"
它匹配引号并且后面跟有任意个字符的情况,但它不匹配引号后面跟有引号的情况。
其他一些正则
国家的缩写 |
□[A-Z][A-Z]□ |
HTML代码 |
<[^ >]*> |
匹配空行 |
^$ |
匹配整行 |
^.*$ |
匹配一个或多个空格(空内容的行) |
□□* |
sed & awk常用正则表达式的更多相关文章
- 【转】sed & awk常用正则表达式
正则表达式元字符 正则表达式中有两种基本元素: 以字面值或变量表示的值(如.代表任意单个字符). 操作符(如*代表将前面的字符重复任意次). 元字符汇总 特殊字符 用途 . 匹配除换行符以外的任意单个 ...
- linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)
本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下一. 管道| / 重定向> / xargs 如:1. 管道和重定向的区别:具体可以见 http://www. ...
- sed awk grep三剑客常用
sed的常用用法: awk的常用用法: grep的常用用法: 除了列出符合行之外,并且列出后10行. grep -A 10 Exception kzfinance-front.log 除了列出符合行之 ...
- grep,awk和sed的常用命令和语法
Grep的常用命令语法 1. 双引号引用和单引号引用在g r e p命令中输入字符串参数时,最好将其用双引号括起来.例如:“m y s t r i n g”.这样做有两个原因,一是以防被误解为 s h ...
- 正则表达式以及sed,awk用法 附带案例
则表达式 基本正则 ^ $ [ ] [^] . * \{n,m\} \{n,\} \(ro\)\{2\} \(\) 扩展正则 egrep grep - ...
- awk sed grep 常用命令
文本间隔 在每一行后面增加一空行: sed G sed G v1 >v2 在每一行后面增加两行空行: sed 'G;G' 将第一个脚本所产生的所有空行删除(即删除所有偶数行): sed 'n;d ...
- Sed&awk笔记之sed篇
http://blog.csdn.net/a81895898/article/details/8482387 Sed是什么 <sed and awk>一书中(1.2 A Stream Ed ...
- linux sed awk seq 正则使用 截取字符 之技巧
[root@room9pc01 ~]# seq 5 1 2 3 4 5 [root@room9pc01 ~]# seq 2 5 2 3 4 5 seq 1 2 10 1 3 5 7 9 [root@d ...
- linux四剑客-grep/find/sed/awk/详解-技术流ken
四剑客简介 相信接触过linux的大家应该都学过或者听过四剑客,即sed,grep,find,awk,有人对其望而生畏,有人对其爱不释手.参数太多,变化形式太多,使用超级灵活,让一部分人难以适从继而望 ...
随机推荐
- Visual Studio Code 常用快捷键
VsCode 快捷键有五种组合方式(科普) Ctrl + Shift + ? : 这种常规组合按钮 Ctrl + V Ctrl +V : 同时依赖一个按键的组合 Shift + V c : 先组合后单 ...
- CF1066D Boxes Packing
传送门 这题为什么要用二分呢?/huaji 首先可以\(O(n)\)预处理出从某个物品\(i\)开始放,只放一个盒子,能放的最后物品的位置\(j\),只要用两个指针维护左右端点,每次移动一下左端点同时 ...
- python - 练习(获取windows硬件信息)
import subprocess import re # info = subprocess.Popen("systeminfo",shell=True,stdout=subpr ...
- Jetson tk1 安装 Intel 7260 无线网卡驱动
Jseton TK1上没有集成的无线网卡,开发板上有一个mini pci-e接口,可以插入Intel 7260这款继承了wifi和蓝牙功能的无线网卡: 该网卡实物如下图,在淘宝和Amazon上都可以买 ...
- Codeplex最流行25个开源项目
1. VMukti富媒体协作平台 2. Microsoft SQL Server Product Samples: Engine 3. Patterns & Practices: Enterp ...
- AT91RM9200---电源管理控制器(PMC)介绍
1.前言 PMC通过集成的两个OSC(一个主振荡器和一个慢时钟振荡器32.768khz)和两个PLLs产生系统所有的clock. PMC提供时钟给嵌入式处理器,并通过在IDLE模式下停止处理器时钟,直 ...
- Linux MMC framework2:基本组件之host
声明:本文很多内容和思路参考了http://www.wowotech.net/comm/mmc_host_driver.html,对原作者表示感谢! 1.前言 本文是Linux MMC framewo ...
- 在SecureCRT中做make menuconfig乱码
不能在SecureCRT中做(显示为乱码),从高手那里学来一招,解决了这个问题: options--terminal--emulation-- xterm ansi color1.先设置终端为x ...
- C/C++:函数调用规则__stdcall,__cdecl,__pascal,__fastcall
__cdecl __cdecl 是 C Declaration 的缩写,表示 C 语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈.被调用函数不会要求调用者传递多 ...
- C#哈希表(HashTable)和Dictionary比较
添加数据时Hashtable快.频繁调用数据时Dictionary快. Dictionary<K,V>是泛型的,当K或V是值类型时,其速度远远超过Hashtable. using Syst ...