grep、sed、awk正则表达式支持情况对比

Shell 1968℃

grep、sed、awk概述

grep 更适合单纯的查找或匹配文本。grep基本是以行为单位处理文本的; grep功能简单,就是一个简单的正则表达式的匹配。 grep可以理解为主要作用是在一个文件中查找过滤需要的内容。

sed 更适合编辑匹配到的文本。Sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。sed编辑器按照一次处理一行的方式来处理文件(或者输入)并把输出送到屏幕上。sed把当前正在处理的行保存在一个临时缓存里,这个缓存叫做模式空间。一但sed完成了对模式空间里的行的处理(即对该行执行sed命令),就把模式空间的行送到屏幕上(除非该命令要删除该行活禁止打印)。处理完该行之后,从模式空间里删除它,然后把下一行读入模式空间,进行处理,并显示。当输入文件的最后一行处理完后,sed终止。通过把每一行存在一个临时缓存里并编辑该行,初始文件不会被修改或被破坏。

awk 更适合格式化文本,对文本进行较复杂格式处理。awk可以通过指定分隔符将一行(一条记录)划分为多个字段,以字段为单位处理文本。awk中支持C语法,可以有分支条件判断、循环语句等,相当于一个小型编程语言。awk不是过滤查找,而是文本处理工具,是把一个文件处理成你想要的格式。awk是一种样式扫描与处理工具。它几乎可以完成grep和sed所能完成的全部工作,同时,它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。如果你要处理与文本样式扫描相关的工作,awk应该是你的第一选择。

正则表达式基础

元字符 含义 举例
. 匹配任何单个字符 r.t可匹配:rat、rut、r t,但不匹配root
* 匹配0或多个在它前面的一个字符 .*能够匹配任意数量的任何字符
^ 匹配一行的开始 ^When能够匹配”When in the course”的开始,但是不能匹配”What and When in the”
$ 匹配行结束符 weasel$ 能够匹配”He’s a weasel”的末尾,但不能匹配”They are a bunch of weasels.”
\ 转义符,用来将元字符当作普通的字符来进行匹配 \$被用来匹配美元符号,而不是行尾,\.用来匹配点字符,而不是任何字符的通配符
[ ]
[n-m]
[^n-m]
匹配括号中的任何一个字符,可使用-来指定区间,在左括号和第一个字符之间使用^字符表示排除 r[aou]t匹配rat、rot、rut,但不匹配ret。[0-9]可以匹配任何数字字符,还可以指定定多个区间,如[A-Za-z]可以匹配任何大小写字母。[^269A-Z]匹配除了2、6、9和所有大写字母之外的任何字符
\< \> 匹配单词(word)的开始(\<)和结束(\>) \<the能够匹配字符串”for the wise”中的”the”,但是不能匹配字符串”otherwise”中的”the”
\(\) 将\(和\)之间的表达式定义为“组”,并将匹配结果保存到一个临时区域(最多9个),可以用\1到\9来引用 暂无
| 将两个匹配条件进行逻辑“或”运算 (him|her) 匹配”him and i”和”her and i”,但不能匹配”them.”
+ 匹配1或多个在它前面的一个字符 9+匹配9、99、999等
? 匹配0或1个正好在它之前的那个字符 暂无
\{i\}
\{i,j\}
匹配指定数目的字符,这些字符是在它之前的表达式定义的 A[0-9]\{3\}能够匹配A123、A348等,但不能匹配A1234。而正则表达式[0-9]\{4,6\}匹配连续的任意4个、5个或者6个数字字符

正则表达式支持对比

命令或环境 . [ ] ^ $ \(\) \{ \} ? + | ( )
vi
awk
sed
grep
egrep
fgrep

转载请注明:零五宝典 » grep、sed、awk正则表达式支持情况对比