登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

梦想之鹰的天空

天高任鸟飞......放飞....心情..........放飞.....梦想

 
 
 

日志

 
 

Linux正则表达式技术指南  

2010-01-22 21:59:44|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

作为一个Linux管理员,您需要对文本文件进行处理。您可以使用不同的工具如grepawk以及sed去查找包含特定文本串的文件。这里,我将介绍一种使用正则表达式,以灵活的方式,去搜索文件中的文本的方法。

   让我们考虑一个正则表达式发挥作用的例子。比如,当你尝试使用命令grep –r host /时,其返回的结果会很庞大。因为每一个包含host这个文本串的字(像ghostscript这样的字)都会匹配。采用正则表达式,你可以更好地定制你 要查找什么。例如,你可以使用正则表达式'^host',告诉grep仅仅查找以host开始的行。

  正则表达式并不是在所有命令中都可用,您使用的命令必须已经事先编好程序,以便能够使用正则表达式。这些命令中最普遍使用的命令是grep、tr以及vi。其它的工具,像sed和awk,也可以使用正则表达式。

  使用正则表达式的一个例子为:

  grep 'lin.x' *

  正则表达式'lin.x'中的点有特殊的含义。它会匹配处于该位置的任意字符。为了防止解释性的问题,我建议您总是将正则表达式置于单引号间,这样就可以防止shell对正则表达式进行解释。

  使用正则表达式

  您可以使用正则表达式做很多事情。在以下的列表中,您可以找到一些最普通、最常用的正则表达式的例子。

  • ^:表示文本串必须在一行的开头。所以,当查找行的开头只为“hosts”的行,可以使用命令:grep -ls '^hosts'
  • $:代表了一行的结尾。所以,当查找行的结尾只为“hosts”的行,可以使用命令:grep -ls 'hosts$'
  •   你可以在一个正则表达式中结合^和$,去查找仅仅包含"yes"的行,使用的命令为grep -ls '^yes$'
  • .: 一个可以指代除了换行符以外任意字符的通配符。为了查找包含tex、tux、tox或者tix的行,可以使用:grep -ls 't.x'
  • [ ]:表示在一个正则表达式中,方括号之间的字符是可选的。为了查找名字为pinda或者linda的用户,可以使用命令:grep -ls '[pl]inda'
  • [^ ]:忽略掉方括号中^之后的所有字符。为了查找包含文本linda的行,并忽略掉其中仅包含linda或者pinda的行,命令为:grep -ls '[^pl]inda'
  • -: 代表一类或者一个范围内的字符。在像tr这样的命令中,这是非常有用的。以下的命令可以将所有的小写字母转为大写字母:tr a-z A-Z < mytext。同样地,你可以使用正则表达式grep -ls '^0-9'去查找其中有一些行是以数字开头的文件。
  • \< 和 \>:查找一个字的开头或者结尾的模式。查找行的开头的字以"san"为起始的命令为: grep \<SAN< code>。这些正则表达式有两个缺点—他们并不查找以指定的正则表达式开头的行,并且他们并不被所有的工具所支持。但是,vi和grep是支持这 种用法的。
  • \:确保在正则表达式中有特殊含义的字符不被解释。查找以任何字符开始,后面跟着文本"host"的文本串的命令为grep -ls '.host'。而如果你需要查找以点为第一个字符,紧接着为"host"的文本串,可以用命令:grep -ls '\.host'

   这些正则表达式可以帮助您找到包含特定文本串的字。您也可以使用正则表达式去指定,在一个字中,该字符串出现的频率。比如,您可以使用正则表达式去搜索 刚好包含用户名"linda"三次的文件。为了达到这一目的,您需要使用正则表达式的重复算子,并保证整个正则表达式位于引号中。没有引号的话,您可能会 导致shell去解释您的重复算子。

  最重要的重复算子的列表如下:

  • *:表示前述的正则表达式可能出现一次、多次或者根本不出现。注意:不要和shell中的*混淆—在shell中,*表示任意字符,而在正则表达式中,*表示之前的正则表达式可能存在。
  • ?:表示在该位置可能是一个字符(但并不是必须是)。例如,同时查找color和colour的命令为:grep -ls 'colo.r'
  • +:表示之前的字符或者正则表达式至少要出现一次
  • \{n\}:表示之前的字符或者正则表达式至少要出现n次。当你查找一个介于100到999之间的数字时,这是很有用的:grep -ls '0-9\{3\}'

  我们已经向您概述了正则表达式的使用方法。这可以让您在做一个管理员时,更加地有效率。正则表达式可以提供更多的功能,包括一些相当复杂的操作。但在之前,请首先掌握我们已经介绍的这些技能。正则表达式可以非常复杂,以至于你会很容易迷失其中。

  评论这张
 
阅读(2119)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018