东方瑞通2000年开始提供红帽 Linux产品技术培训,是国内最早从事红帽 Linux 技术的培训中心之一。每年选择东方瑞通参加红帽培训的Linux学员高达1000人,至今已为社会输出大量的RHCE认证工程师。以严格培训企业顶级人才为宗旨,凭借雄厚的师资、完整的课程体系、稳步增长的培训业绩深获红帽高度肯定。 1正则表达式 翻译领域不乏让人摸不着头脑的词汇,比如“句柄”、“套接字”、“鲁棒性”。当然,“正则表达式”也属于这一类词汇。小瑞刚接触正则表达式的时候,对这个名词感到非常迷惑。深入了解之后,才突然明白,原来所谓的regular expression,其实就是“有规律、有模式的字符串”而已。 很少有一门技术,只需要投入少量的学习成本即可获得巨大的价值回报。正则表达式就属于这一类技术。可惜很多人被它密码般的语法形式当头棒喝,甚至连门都不得而入。 为什么你应该学习正则表达式?其一,在实践中应用这门技术其实不难,只需理解为数不多的几个元字符以及并不复杂的语法,就能够获得强大的文本操控能力;其二,正则表达式往往能提供处理文本的最简单最高效的解决方法(有时也许是唯一的解法)。遇上复杂的情况,如果你不会正则表达式,就只好束手无策、黯然神伤了。 file:///C:\Users\SUNLIJ~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png 2文本检索 grep命令可以完成简单的文本搜索任务。 先来准备一份文本材料,把grep的帮助页保存为文本文件: > man grep | col -b > grephelp.txt 下面,我想检索grephelp.txt 文件中所有包含 "find" 这个单词的文本行: > grep "find" grephelp.txt To find all occurrences of the word `patricia' in a file: To find all occurrences of the pattern `.Pp' at the beginning of aline: To find all lines in a file which do not contain the words `foo' or 我希望匹配到的文本使用不同的颜色显示,可以添加 --color 选项,默认的颜色是红色。 > grep --color "find" grephelp.txt 我希望在匹配结果中显示文件名和行号,使用 -H 选项可以显示文件名,使用 -n 选项可以显示行号: > grep -H -n --color "find" grephelp.txt grephelp.txt:252: To find all occurrences of the word `patricia' ina file: grephelp.txt:256: To find all occurrences of the pattern `.Pp' atthe beginning of a line: grephelp.txt:265: To find all lines in a file which do not containthe words `foo' or 很多时候,我们需要知道匹配行前后的上下文。-A 和 -B 这两个选项会是你的好朋友。-A n 表示显示匹配行以及其后的 n 行;-B n 表示显示匹配行以及之前的 n 行。现在,我们在匹配行的前后分别额外显示两行: > grep -A 2 -B 2 -H -n --color "find" grephelp.txt grephelp.txt-250- grephelp.txt-251-EXAMPLES grephelp.txt:252: To find all occurrences of the word `patricia' ina file: grephelp.txt-253- grephelp.txt-254- $ grep 'patricia' myfile -- -- grephelp.txt-254- $ grep 'patricia' myfile grephelp.txt-255- grephelp.txt:256: To find all occurrences of the pattern `.Pp' atthe beginning of a line: grephelp.txt-257- grephelp.txt-258- $ grep '^\.Pp' myfile -- -- grephelp.txt-263- match any character. grephelp.txt-264- grephelp.txt:265: To find all lines in a file which do not containthe words `foo' or grephelp.txt-266- `bar': grephelp.txt-267- 如果需要查找所有不包含"find" 的文本行,该怎么做呢?很简单,使用 -v 选项即可。 grep 还有两个变体,egrep 和 fgrep。相对于仅支持基本正则模式(BREs)的 grep 来说,egrep 支持扩展正则模式(EREs),因而检索能力更为强大;fgrep 是所有三个工具中速度最快的一个,因为它完全不支持正则模式。 其实,小瑞更喜欢一个叫做ack的工具。 file:///C:\Users\SUNLIJ~1\AppData\Local\Temp\msohtmlclip1\01\clip_image004.jpg 3文本替换 tr命令可以完成简单的字符转换任务。例如,可以通过tr把grephelp.txt文件转换为全文大写: > cat grephelp.txt | tr '[:lower:]' '[:upper:]' 简而言之,tr 的工作就是把第一个集合中的字符转换为第二个集合中的相应的字符。常用的字符集合有下面这些: [:alnum:]:字母数字 [:alpha:]:字母 [:cntrl:] :控制字符 [:digit:]:数字 [:graph:]: 图形字符 [:lower:]:小写字母 [:print:]:可打印字符 [:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母 [:xdigit:]:十六进制数字 tr命令的应用场景非常受限,如果希望进行更加灵活的模式替换,我们还有 sed(也就是 stream editor,流编辑器)。 把文件中所有的"find" 文本替换为 "search": > sed "s/find/search/g" grephelp.txt 这条命令中,s 表示执行“替换操作”,/find/search/表示把 "find" 替换为 "search",g 表示对一行中所有的匹配进行替换。sed 默认把处理结果打印到标准输出,我们可以通过重定向把处理结果转储到一个新文件中,或者使用选项 -i 把结果直接写回原文件(有风险,需谨慎): > sed -i "s/find/search/g" grephelp.txt 把文件中所有的数字 n 替换为"--n--" 的形式: > sed -E "s/([0-9]+)/--\1--/g" grephelp.txt 选项 -E 表示在处理过程中使用扩展的正则模式(EREs),替换命令中的 \1 表示引用正则表达式的第一个捕获分组。请注意,-E 这个选项只在 Mac OS X 系统和 FreeBSD 系统上有效,其他Unix系统需要使用另一个等效的选项 -r。 想了解更多资讯吗?持续关注东方瑞通官方微博(东方瑞通IT培训与IT服务),小编为您分享更多精彩最热资讯。
|