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正则表达式支持情况对比