红联Linux门户
Linux帮助

使用Linux文本工具简化数据的提取(一)

发布时间:2006-11-03 10:23:37来源:红联作者:xcoolo
  很多 Linux® 系统管理员都需要做一些整理纯文本配置文件的乏味工作。幸运的是,Linux 有很多源自于 UNIX® 的数据提取工具,包括 head、tail、grep、egrep、fgrep、cut、paste、join、awk 等。本文给出了几个真实的例子,它们可以展示如何使用这些简单的命令行工具更好地服务于系统管理工作。本文将逐一介绍这些数据提取工具及其操作,将它们应用到日常工作所使用的典型文件中,并介绍一下为什么这些工具对于从这些文件中提取数据来说非常重要。

  Linux 操作系统中有很多文件:配置文件、文本文件、文档文件、日志文件、用户文件,这个清单还在不断增长。通常,这些文件都包含了要查找重要数据所需要访问的一些信息。尽管我们可以简单地使用诸如 cat、more 之类的标准工具将大部分文件的内容输出到屏幕上,但是系统中有更加合适的工具可以对文本进行过滤和处理,这样就可以只关心我们想要的内容。

  在阅读本文的过程中,您可以打开 shell 并体验一下每个工具的例子。

  正则表达式

  在开始之前,我们需要首先理解什么是正则表达式,以及如何使用正则表达式。

  在最简单的形式中,正则表达式(regular expression)是用来在文件中定位文本的一些搜索标准。例如,要查找所有包含单词 “admin” 的行,我们就可以对 “admin” 进行搜索。因此,“admin” 就构成了一个正则表达式。如果我们不但希望查找 “admin”,而且还想将其替换成 “root”,那么我们就可以在一个工具中使用适当的命令将 “admin” 替换成 “root”。它们都构成了正则表达式。

  正则表达式所采用的一些基本规则如下:

  ● 任何单个字符或一串字符都可以匹配字符本身,例如上面的 “admin” 的例子。

  ● ^ 符号(^)表示一行的开始;$ 符号($)表示一行的结束。

  ● 要搜索特殊字符(例如 $ 符号),需要在这些字符前面加上反斜线(\)。例如, \$ 就表示查找 $,而不是一行的末尾。
 
  ● 点(.)代表任何单个字符。例如,ad..n 代表 5 个字符项,前两个字符是 “ad”,最后一个字符是 “n”。中间两个字符可以是任何字符,但是只能是由两个字符组成。

  ● 任何时候如果正则表达式包含在斜线中(例如 /re/),搜索就是通过文件顺序进行的。如果正则表达式包含在问号中(例如,?re?),搜索就是通过文件逆序进行的。

  ● 方括号([])表示多个值,减号(-)表示值的范围。例如,[0-9] 与 [0123456789] 相同,[a-z] 就等效于搜索任何小写字符。如果一个列表的首字符是 ^ 符号,它就匹配不在这个清单中的任何字符。表 1 给出了这些规则是如何真正进行匹配的。

  表 1. 示例正则表达式

引用:
例子 说明
[abc] 匹配 “a”、“b”、“c” 之一
[a-z] 匹配从 “a” 到 “z” 的任何一个小写字符
[A-Z] 匹配从 “A” 到 “Z” 的任何一个大写字符
[0-9] 匹配从 0 到 9 的任何一个数字
[^0-9] 匹配任何除了 0 到 9 数字范围内的任何字符
[-0-9] 匹配从 0 到 9 的任何数字,或者是短横线(-)
[0-9-] 匹配从 0 到 9 的任何数字,或者是短横线(-)
[^-0-9] 匹配除从 0 到 9 的数字和短横线(-)之外的任何字符
[a-zA-Z0-9] 匹配任何字符或数字


  了解了这些信息,下面让我们开始看一下相关工具。
文章评论

共有 1354 条评论

  1. 602974971 于 2012-04-06 17:58:59发表:

    9# 65.110.43.*


    留着用白

  2. 602974971 于 2012-04-06 17:58:48发表:

    基础知识

  3. 72.36.192.* 于 2007-09-03 06:02:09发表:

    Nice site!
    machine a sous bally | jeu casino gratuit | casino virtuel gratuit | regle de jeu casino | casino americain