使用Linux正则表达式灵活搜索文件中的文本_正则表达式

 正则表达式是一种符号表示法,用于识别文本模式。Linux处理正则表达式的主要程序是grep。grep搜索与正则表达式匹配的行,并将结果输送至标准输出。

1. grep匹配模式

grep按下述方式接受选项和参数(其中,regex表示正则表达式)

复制代码 代码如下:

grep [options] regex [files]

其中options主要为下表:

 

选项 含义 功能描述
-i ignore case 忽略大小写
-v invert match 不匹配匹配的
-l file-with-match 输出匹配的文件名
-L file-without-match 输出不匹配的文件名
-c count 输出匹配的数目(行数)
-n number 输出匹配行的同时在前面加上文件名及在文件名中的行数
-h no-filename 抑制文件名的输出

 作为一个Linux管理员,您需要对文本文件进行处理。您可以使用不同的工具如grep、awk以及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\}'

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

时间: 2024-10-25 23:47:49

使用Linux正则表达式灵活搜索文件中的文本_正则表达式的相关文章

使用Linux正则表达式灵活搜索文件中的文本

正则表达式是一种符号表示法,用于识别文本模式.Linux处理正则表达式的主要程序是grep.grep搜索与正则表达式匹配的行,并将结果输送至标准输出. 1. grep匹配模式 grep按下述方式接受选项和参数(其中,regex表示正则表达式) 复制代码 代码如下: grep [options] regex [files] 其中options主要为下表: 选项 含义 功能描述 -i ignore case 忽略大小写 -v invert match 不匹配匹配的 -l file-with-matc

使用正则表达式 exec 获取字符串中的汉字_正则表达式

要求:仅获取attr中的 "编辑发起状态的执行人表单" ,路径C:\fakepath\是不固定的,可以是C:\fakepath\hhh\hhhh\ 解决: var attr = C:\fakepath\编辑发起状态的执行人表单.png attr = title.split(".")[0]; // 截取到 --> "C:\fakepath\编辑发起状态的执行人表单" var reg = new RegExp('[\u4e00-\u9fa5]+

正则表达式在UBB论坛中的应用_正则表达式

一.读者指引 读者指引帮助你掌握本文的梗概.以免你看了大半才明白这编文章不适合你,给你造成视觉污染. 如果你正在用ASP写程序,或者你正在写一些诸如BBS.留言溥或表单数据检查之类的东东那就值得一看. 如果你对正则表达式已经了如指掌,那么你不必一行行的看,只要看看我写的模板,再比较一下,取其精华就行了. 如果你还是第一次接触正则表达式,那么你最好一行行的看,并逐条试验 当你熟练的掌握了正则表达式的用法,你就会发现其乐无穷. 二.正则表达式的概念 什么是UBB代码?什么是正则表达式? UBB代码是

基于Python正则表达式提取搜索结果中的站点地址

正则表达式对于Python来说并不是独有的,最近在把google搜索的结果中所有的站点地址导出,于是想到用python正则表达式提取搜索结果中的站点地址. 这其中涉及几个需要解决的问题: 1.获取搜索的结果文本 为了获得更多的地址,我使用了Google的高级搜索功能,每个页面显示100条结果. 获得显示的结果后,可以查看源码,并保持成文本文件就有了搜索的结果文本 2.分析如何提取站点信息 首先需要分析获取的页面,查看以怎样的方式可以提取出站点信息. 我使用IE8自带的开发工具(按F12就会弹出来

基于Python正则表达式提取搜索结果中的站点地址_正则表达式

正则表达式对于Python来说并不是独有的,最近在把google搜索的结果中所有的站点地址导出,于是想到用python正则表达式提取搜索结果中的站点地址. 这其中涉及几个需要解决的问题: 1.获取搜索的结果文本 为了获得更多的地址,我使用了Google的高级搜索功能,每个页面显示100条结果. 获得显示的结果后,可以查看源码,并保持成文本文件就有了搜索的结果文本 2.分析如何提取站点信息 首先需要分析获取的页面,查看以怎样的方式可以提取出站点信息. 我使用IE8自带的开发工具(按F12就会弹出来

【POI】使用POI 创建生成XLS,打开xls文件提示【此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数。】

   使用POI 创建生成XLS,打开xls文件提示[此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数.]       原因: 是因为在POI处理xls的过程中,太多次调用了: HSSFFont font = hssfWorkbook.createFont(); 解决方法: 将font创建为全局变量,在需要使用的地方再调用进行单独的设置.  

linux下批量替换文件中的内容

  grep命令可以查找单个文件或文件夹下文件中的内容,使用参数"r"或"-R"可以递归查找指定文件夹下的所有文件;参数"l"可以让grep输出包含指定字符串的文件名,首次匹配成功后立刻停止对同文件的查询.如果不使用"l",grep查询单个文件时输出文件中所有包含指定字符串的行,对文件夹查询时则按照"文件名:包含字符串行"的方式输出. 有了上面提到的知识,执行批量替换的命令可以写为: grep "

linux守护进程--定期向文件中插入log记录

        要求:自己动手实现一个守护进程,当控制台窗口关闭时还可以在后台运行,每隔一秒钟向my.log文件中插入一条记录,记录格式如下:yyyy-mm-dd hh:mi:se . //makefile .SUFFIXES: .c .o CC=gcc SRCS=mydaemon.c OBJS=$(SRCS:.c=.o) EXEC=mydaemon all: $(OBJS) $(CC) -o $(EXEC) $(OBJS) @echo '-------------ok-------------

正则表达式字面量在ECMAScript5中的变化_正则表达式

在<JavaScript语言精粹>的第72页有这样一段: 用正则表达式字面量创建的RegExp对象来共享同一个单实例: 复制代码 代码如下: function make_a_matcher( ) { return /a/gi; } var x = make_a_matcher( ); var y = make_a_matcher( ); // 注意:x 和 y 是同一个对象! x.lastIndex = 10; document.writeln(y.lastIndex); // 10当你在浏览