正则表达式(一)

在系统中处理文件或者文件夹时,都需要对正则表达式有一定的理解。正则表达式是用来定义模式的字符,模式可以用来搜索文本文件或者列出文件和文件夹。

正则表达式的各个部分有很多方法来进行区分,为了便于理解,我们将它分成较多的几个部分,使每个部分尽可能的简单。

正则表达式有以下几个部分:

 

1)Characters and Groups

2)Anchors

3)Class/Range

4)Quantifier

这一篇博客我们只讨论前两部分:Characters and Groups和Anchors,后两部分在我的下一篇博客中继续讨论。

1、执行搜索

大多数搜索都可以调用命令”grep“来实现,’grep‘命令通过指定正则表达式来对文件和数=数据流进行搜索。

在文件中进行搜索需要指定文件名和使用正则表达式。语法如下:

grep <regexp> <filename>

如果文本来自一个数据流,数据将通过管道(|)传递给命令”grep“。例如将ls的文件列表信息通过管道传给’grep‘,则命令如下:

ls | grep <regexp>

1、Characters and Groups

常见的搜索时对单词、字符、单词组进行搜索。

要对字符’line‘进行搜索,我们可以执行以下命令:

grep line <filename>

我们需要记住我们搜索的不是单词”line“而是字符”line“,例如包含’line‘、’lines‘、’in-line‘等等的行都将被搜索出来,只要是包含这四个字母的都会被搜索。注意搜索是大小写敏感的。

如果想要忽略大小写,则可以使用参数”-i“。命令如下:

grep -i <regexp> <filename>

我们还可以使用参数”-n“获得匹配发生的行号,使用参数’-c‘获得匹配发生的次数,但不会显示匹配项。

为了找到”in“后面跟着字符的所有情况,我们可以使用符号”.“。要匹配所有”in“后面有字符的情况,搜索字符串因该是”in.“,搜索可能返回的结果有”using“、”input“、”information“等等。

因为”.“表示0-1个字符,我们还可以使用星号”*“表示前面的字符出现0次或多次。例如,执行搜索字符串”ing*“,将会找到’in‘、’ing‘、’ingg‘等等。’g‘将出现0次或无数次。如果是搜索’in*‘,可能的结果有’i‘、’in‘、’inn‘等等。

我们还可以创建一组字符。组是放在圆括号内的,但是必须转义字符(\)。若要转义字符,请在字符前放置反斜杠(\),这样“grep”便将该字符视为文字字符,而不是命令字符。当使用圆括号创建一组字符时,将会用到' \('和' \)'。

下面我们来看一些例子。

首先我们创建一个调用示例的文件,在终端下运行以下命令:

grep --help > grephelp.txt

这个命令将会创建一个包含grep帮助信息的文件grephelp.txt。

如果我们想查找字母' ine ',我们可以使用如下命令:

grep ine grephelp.txt

可以看见搜索的结果全部显示出来了:

  -x, --line-regexp         强制 PATTERN 仅完全匹配一行
  -n, --line-number         输出的同时打印行号
      --line-buffered       每行输出清空
  -o, --only-matching       show only the part of a line matching PATTERN

'使用命令以下命令来计算结果的次数:

grep -c ine grephelp.txt

结果为4。

如果我们想找到in后面跟着其他字符的所有情况,则运行以下命令:

grep in. grephelp.txt

我们可以添加多个’.‘表示后面跟着多个字符,如

grep in.. grephelp.txt

找到的结果可能是‘lines’、‘line’、 ‘binary’、 ‘invocation’等。

如果我们想在一个文件中搜索两个单词,该怎么办?如果我们想搜索单词' before '和' after ',那么我们可以使用如下命令:

grep \(before\|after\) grephelp.txt

我们来看一下这个正则表达式:

\(before\|after\)

’\‘为转译字符,括号用来创建组, |表示’或‘,所以转译后的表达式为:(before | after)。

如果我们想搜索单词' matching '和' matches ',将'match '作为基本单词,并添加' ing '或' es ',命令如下:

grep match\(ing\|es\) grephelp.txt

可以向组中添加更多的项来生成更多的搜索项。圆括号之中的任何内容都将添加到组中的项中,以生成更长的搜索字符串。

3、Anchors

Anchors用于指定特定位置的字符,需要记住两种。第一种Anchors是'^',表示一行的开始。第一种Anchors是'$',表示一行的结尾。

有了Anchors我们可以指定一行的开始和结尾。

举个例子,我们回到主目录,列出主目录下的清单:

cd ~
ls -l

结果如下:

可以看到如果最左边的第一个字符是d,则表明是文件夹,如果是破折号则表明是文件。如果我们只想列出文件夹我们可以执行以下命令:

ls -l | grep ^d

ls -l 输出的信息通过管道传给grep命令进行搜索,正则表达式是第一个字符为’d‘。

同理我们想找到所有以’s‘结尾的行可以执行以下命令:

grep s$ grephelp.txt

我们还可以搜索所有以ne结尾的行:

grep ne$ grephelp.txt

正则表达式非常重要,希望大家可以多多了解。剩下的部分在下一篇博客中讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值