Debian/类Unix文本处理
Debian | Debian安装 | Debian使用 | Debian系统升级 | Debian常见问题 |
在类 Unix 的系统中,有几个文本处理工具经常用到。
文本处理[ ]
非正则表达式的方法有:
- head 显示文件的开始部分。
- tail 显示文件的结尾部分。
- sort 给文件中的每一行排序。
- uniq 删除文件中重复的行。
- tr 转换或者删除字符。
- diff 把文件中的内容一行一行的比较。
基本的正则表达式 Basic regular expression (BRE) :
扩展的正则表达式 Extended regular expression (ERE) is used:
- egrep 按模式匹配文本。
- awk 进行简单的文本处理。
- perl 做非常难以想像的文本处理。
正则表达式[ ]
正则表达式用在很多文本处理工具里面。它们和 shell 的通配符比较相似,但是它们更复杂也更强大。
正则表达式是由文本字符和元字符组成的,用来描述匹配模式。元字符是有特殊意义的字符。它们有两种主要的形式 BRE 和 ERE,主要取决于类 Unix 文本处理。
在扩展的正则表达式(EREs)里面元字符包括"\ . [ ] ^ $ * + ? ( ) { } |"。正则表达式表示:
- c
这个用来匹配非元字符 "c".
- \c
这个用来匹配原本的字符"c".
- .
这个用来匹配任意字符包括换行符。
- ^
这个用来匹配字符串的开始。
- $
这个用来匹配字符串的结尾。
- \<
这个用来匹配一个单词的开始。
- \>
这个用来匹配一个单词的结尾。
- [abc...]
这个字符序列用来匹配 "abc..."中的任意字符。
- [^abc...]
这个否定的字符序列匹配所有的字符除了 "abc...".
- r*
这个匹配以"r" 开始的后面有 0 个或者多个字符的字符串。
- r+
这个匹配以"r" 开始的后面有一个或者多个字符的表达式。
- r?
以"r" 开始后面有 0 个或者 1 个其他的字符。
- r1|r2
匹配"r1"或者"r2"。
- (r1|r2)
匹配"r1"或者 "r2"并且把它当作一个分类正则表达式。
在BREs里面元字符"+ ? ( ) { } |"不再具有它们特殊的含义,而是使用的有反斜杠的版本"\+ \? \( \) \{ \} \|"。因此分组(r1|r2)需要被表示成\(r1|r2\)。 因为emacs,虽然基本上是 BRE,但是它把"+ ?"当作元字符。因此不需要特别表示它们。
举个例子,grep 可以用正则表达式来搜索文本:
$ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE Yoyodyne, Inc., hereby disclaims all copyright interest in the program
替换表达式[ ]
在替换表达式里面,下面的字符有特殊的含义:
- &
这个会替换正则表达式所匹配的部分。(在 emacs 里面用 \&)
- \n
这个会替换 n-th括号正则表达式所匹配的内容。
- 在 Perl 里面,$n 替换了 \n,& 也没有特殊的含义。
举个例子:
$ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=&=/' zzz=&=
请特别注意这些括号正则表达式的格式,以及这些被匹配的文本在文本处理工具里面是如何使用的。
这些正则表达式可以用来控制光标的运动和编辑器里面的文本替换。
Debian使用手册导航 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
参考来源[ ]
http://www.debian.org/doc/manuals/debian-reference/ch-tutorial.zh-cn.html#s-text-process