您当前的位置:首页 > 互联网教程

Linux正则表达式教程:Grep Regex示例

发布时间:2025-05-24 13:44:03    发布人:远客网络

Linux正则表达式教程:Grep Regex示例

一、Linux正则表达式教程:Grep Regex示例

1、正则表达式是特殊字符,可帮助搜索数据,匹配复杂模式。正则表达式缩写为“regexp”或“regex”。

2、为了便于理解,让我们逐一学习不同类型的正则表达式。

3、一些常用的正则表达式命令是tr,sed,vi和grep。下面列出了一些基本的正则表达式。

4、执行cat示例以查看现有文件的内容

5、' ^'匹配字符串的开头。让我们搜索一下STARTS的内容

6、仅过滤以字符开头的行。将忽略开头不包含字符“a”的行。

7、这些表达式告诉我们字符串中字符的出现次数。他们是

8、我们想要检查字符'p'是否在字符串中依次出现2次。为此,语法将是:

9、注意:您需要使用这些正则表达式添加-E。

10、这些正则表达式包含多个表达式的组合。他们之中有一些是:

11、假设我们要过滤字符'a'在字符't'之前的行

12、大括号扩展的语法是花括号“{}”内的序列或逗号分隔的项目列表。序列中的起始和结束项由两个句点“..”分隔。

13、在上面的示例中,echo命令使用大括号扩展创建字符串。

二、Linux||正则表达式及grep命令

1、以下内容首发自公众号“小汪Waud”。

2、本期介绍在Linux环境下的正则表达式及grep命令。

3、正则表达式(Regular Expression)是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些字符的特定组合,组成一个“规则字符串”,这个字符串用来表达对字符串的一种过滤逻辑。

4、正则表达式基本上是一种表示法,只要程序支持这种表示法,该程序就可以用来作为正则表达式的字符串处理之用。如vi、grep、awk、sed等程序支持正则表达式,所以可以使用正则表达式的特殊字符来进行字符串的处理。但例如cp、ls等命令并不支持正则表达式,所以只能用自己的通配符。

5、正则表达式依照不同的严谨度分为:基础正则表达式和扩展正则表达式。

6、 grep是一种强大的文本搜索工具,可以使用正则表达式匹配模式查找文件里符合条件的字符串,并打印出来。

7、 grep支持三种正则表达式语法:Basic、Extended和perl兼容。如果没有提供正则表达式类型,grep将搜索模式解释为基本的正则表达式。要将模式解释为扩展正则表达式,请使用-E。

8、 grep [OPTION]... PATTERN [FILE]...

9、 grep [-A] [-B] [--color=auto]"查找字符" [模式] [文件]

10、首先通过cat命令查看samples.txt的内容,如下图

11、如果想检索以K为行首的行,通过以下命令即可得到

12、如果想检索以Z为行尾的行,通过以下命令即可得到

13、如果想检索三个字符其中前面为K,后面为D中间字符,为任意字符,通过以下命令即可得到

14、

15、

三、grep 命令与正则表达的协同使用

1、 Tip Please feel free to contact me via mail above for any confusion or suggestions

2、 grep(Global Research)亦即根据某一个模式(过滤规则)去全局性的搜索文本,并将符合模式的文本行显示出来。grep其本身的意义是做部分匹配,也就是说,当你使用grep进行搜索的时候,只要某一行的内容里部分匹配,grep就会将结果显示出来。而这里的模式(Pattern)是指,文本字符和正则表达式的元字符组合而成的匹配条件。简而言之,grep就是使用基本正则表达式定义的模式来过滤文本的命令。

3、 notice:grep默认工作在贪婪模式下,也就是在匹配的过程中,会尽可能长的匹配,能匹配到哪就匹配到哪。

4、 usage: grep [options] PATTERN [FILE...]

5、正则表达式分为基本正则表达式(Basic REGEXP)与扩展正则表达式(Extended REGEXP)。

6、无论是哪一种,正则表达式都含义几个特性:

7、正则表达式里都有一些元字符,这些元字符不表示其本身的意义,而是在正则表达式中有其特定的意义。我在 bash特性简单梳理一文中提及过文件名通配(globbing)。

8、在文件名通配中,这些元字符的特定意义如下:

9、而在正则表达式中,元字符的特定意义为:

10、除了这些特定的元字符的意义外,正如文件通配符中所描述的字符集合,正则表达式同样支持字符集合:

11、位置锚定,就是在进行搜索的时候,所搜索的字符必须出现在特定的位置。

12、分组的意义,通俗的来讲,就是将一捆字符作为一个整体来看待,用 \(\)来表示。

13、例如: \(ab\)*将ab作为一个整体,星号修饰的ab这一个整体。而ab*仅仅修饰b一个字符

14、上面这个命令就表示在文件 test.txt中匹配ab这一整体,它可以匹配到ab, abab, ababab这样。

15、与分组搭配使用的还有后向引用。

16、扩展正则表达式与正则表达式在很多地方的意义都是相同的。例如:

17、除了与正则表达式相同意义的地方,扩展表达式也有其独特的地方: