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

Linux正则表达式

发布时间:2025-05-21 01:30:31    发布人:远客网络

Linux正则表达式

一、Linux正则表达式

在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令:

1.grep:最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。

2.egrep:扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。

3.fgrep:快速grep,这个版本匹配固定字符串而非正则表达式。并且是唯一可以并行匹配多个字符串的版本。

grep [options...] pattern-spec [files...]

-E:使用扩展正则表达式进行匹配, grep-E或取代 egrep命令。

-F:使用固定字符串进行匹配, grep-F或取代传统的fgrep命令。

-e:通常第一个非选项的参数认为是要匹配的模式,也可以同时提供多个模式,只要将其放入单引号,并用换行字符分隔他们。

模式以减号开头时,为防止混淆其为选项,-e选项说明其后的参数为模式,即使他以减号开头。

-f:从pat-file文件读取模式作为匹配。

-l:列出匹配模式的文件名称,而不是打印匹配的行。

-q:静默的,如果匹配成功,不将匹配的行输出到标准输出;否则即是不成功。

-s:不显示错误信息,通常与-q并用。

说明:可以同时查找多个文件中的内容,当指定多个文件时,每个显示出的文件行前会有文件名加一个冒号标识其来自哪个文件。

可以使用多个-e或-f选项,建立要查找的模式列表。

(1).一般字符:没有特殊意义的字符

(2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义

2.如下讲下正则表达式中的常见meta字符

(1).POSIX BRE与ERE中都有的meta字符:

\  :  通常用于打开或关闭后续字符的特殊含义,如\(...\)与\{...\}

.  :  匹配任何单个字符(除NUL)

* :  匹配其前的任何数目或没有的单个字符,例: . 表示任一字符,则.*匹配任一字符的任意长度

^ :  匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义

$ :  匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义

[] :  匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,

\{n,m\}:区间表达式,匹配在它前面的单个字符重现的次数区别。\{n\}指重现n次;\{n,m\}指重现n至m次;

\(\):保留空间,可以将最多9个独立的子模式存储在单个模式中。如\(ab\).*\1:指匹配ab组合的两次重现,中间可存在任意数目的字符。

\n:重复在\(与\)方括号内第n个子模式至此点的模式。

{n,m}:与BRE的\{n,m\}功能相同

+:匹配前面正则表达式的一个或多个扩展

?:匹配前面正则表达式的零个或一个扩展

():匹配方括号括起来的正则表达式群

[::alnum]:数字字符[:digit:]:数字字符[:punct:]:标点符号字符

[:alpha:]:字母字符[:graph:]:非空格字符[:space:]: 空格字符

[:blank:]:空格与定位字符[:lower:]:小写字母字符[:upper:]:大写字母字符

[:cntrl:]:控制字符[:print:]:可显示的字符[:xdigit:]: 16进制数字

指将多个字符视为一个符号,如[.ch.]即将ch视为一个符号

认为多个字符相等,如[=e=]在法文的locale里,可匹配于多种与e相似的字符,此处不再列出。

说明:这三种构造除其自身的方括号之外,还必须使用额外的方括号括起来。

例: [[:alpha:]!]:匹配任一英文字母或感叹号。

[[.ch.]:匹配ch排序元素,而不匹配单独的字母c或h.

 3.简单正规表达式匹配案例

china : 匹配此行中任意位置有china字符的行

^china :匹配此以china开关的行

^china$:匹配仅有china五个字符的行

[Cc]hina:匹配含有China或china的行

Ch.na:匹配包含Ch两字母并且其后紧跟一个任意字符之后又有na两个字符的行

Ch.*na:匹配一行中含Ch字符,并且其后跟0个或者多个字符,再继续跟na两字符

如下通过常用实例来学习BRE和ERE匹配,源文件url.txt内容如下:

匹配以http或者https开头,并且其后为:并且含有.的串

grep'^https\{0,1\}.*\..*' url.txt

grep-E '^https?.*\..*' url.txt

匹配以字母数字或者下划线开头的多个字符,其后有一个@之后有多个字母数字或者下划线,其中有一个.号

grep'^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*\..*' email.txt

转自嘉为教育-rhce认证_rhce培训_linux培训_linux认证_linux考证

二、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、

三、Linux如何使用正则表达式命令文本文件操作命令

1、 Linux对文本操作命令及正则表达式:

2、 cat是 concatenate的缩写,所以它的作用其实是连接文件。但默认情况下它会将连接文件的结果送到标准输出。所以我们常用来显示文件内容。类似于 dos中的 type。

3、当一个文件的内容超过一屏后,我们可以用 more这个指令来逐屏察看文件内容。

4、 less在 more的基础上,更可以逐行察看,前后翻页。

5、 head显示文件开头部分内容,默认显示前十行参数--lines或者–n指明显示行数基本格式:

6、 tail显示文件结尾部分内容,命令用法同 head,参数-f显示文件的纪实更新,用于监视日志文件

7、 tail默认显示文件列表中每个文件的后 10行,如果没有文件名或文件名为“-”则其从标准输入中读取文件,如果有多个文件则其会在文件前面加上“==>文件名<==”以便区别。

8、# tail/etc/mail/sendmail.mc默认查看文件的后 10行内容

9、# tail–n 20/etc/passwd查看文件后 20行内容

10、注意:# tail–f/var/log/message实时监控日志文件更新信息,非常重要

11、 diff用于比较两个文件之间的区别,并送到标准输出。输出时先报告两个文件的哪一行不同。基本格式:

12、 uniq用于去除文本中相邻的重复行。

13、-u参数可以只显示那些没有被重复过的行。-d显示有被重复过的行。

14、 cut可以根据一个指定的标记(默认是 tab)来为文本划分列,然后将此列显示。使用权限:所有使用者

15、基本格式: cut-cnum1-num2 filename

16、说明:显示每行从开头算起 num1到 num2的文字。

17、 [root@uplooking root]$ cut–f1–d:/etc/shadow表示以:为分隔符,显示/etc/shadow的第一列 sort

18、 sort用来按各种需要重新排列文本,一般运用在一个管道之后。例如:

19、默认情况下 sort按照字母顺序排列文本。

20、 wc用来统计一个文件的行数、词数、字数并送到标准输出。也可以用-l(行数)、-w(词数)、-c(字数)来指定输出内容。