linux下正则表达式

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 22:15   4470   0

正则表达式是一种处理字符串的方法,是一组具有一定性质的字符串的描述,我自己认为正则表达式就是字符串的模板。

在Linux中,正则表达式以行为单位进行字符串的进行处理,通过一些特殊字符串的辅助,可以让用户轻易达到查找、删除和替换某指定字符串的处理程序。

按照严谨程度,可以分为基础正则表达式和扩展正则表达式。我们一般使用的是基础正则表达式,不过为了更简单地完成复杂的字符串处理动作,就要使用扩展正则表达式。

基础正则表达式:

特殊符号代表意义
[:alnum:]英文大小写字符及数字 0-9 A-Z a-z
[:alpha:]英文字符 A-Z a-z
[:digit:]数字 0-9
[:lower:]小写英文字符 a-z
[:upper:]大写英文字符 A-Z
[:blank:]空格、Tab
[:punct:]标点符号 " ' ? ! ; : # $
[:space:]任何会产生空白的字符,空格、Tab、CR
[:print:]任空格符(空格键和Tab)外的其他所有按键
[:xdigit:]十六进制数字类型 0-9 A-F a-f
[:cntrl:]键盘上面的控制按键 CR LF TAB DEL
^一行的开头
$一行的结束
*前一个字符出现0次会多次
.任意字符
[list]表示其中一个 有且仅有一个 括号内的元素为or的关系 例如[abcd]为abcd中的一个
\转义字符 例如在正则表达式中.代表任意字符,若果要找出含有点的行该怎么办? \.
[n1-n2]字符范围 强调的是范围 根据编码方式,位置在n1和n2的字符中的一个。 [A-Z]
[^list]反向选择 例如 不包含abc的一行 [^abc]
{n,m} [n], {n,}对前面字符(组)的次数范围的限定 a{2,5} a出现2-5次, a{2} a出现2次, a{2,} a出现2次或2次以上


扩展正则表达式

特殊符号

代表意义

+

前面的一个字符出现一次或多次 一次以上

?

前面的字符出现0次或一次

|

或(or) abc|bcd

()

组字符串 glad或good g(la|oo)

()+

括号中的字符串出现一次或多次 例 A(xyz)+C 可匹配的字符串有AxyzC AxyzxyzC等

注:

  1. 在正则表达式中 ! 不是特殊符号,并不表非!的意思。
  2. ( ) 是对字符串来说,而 [ ] 是对单个字符来说,例如找出A和C之间含有abcd任一字符的行,则正则表达式可表示为A[abcd]C。而找出A和C之间含有abcd或efgh这两种字符串时,正则表达式为A(abcd|efgh)
  3. 使用 [ ] 表示的当然也能够使用()和|表示,只是 | 的每一个元素是一个字符,而不是一个字符串。
  4. | 可以表示两个字符串的或,例如找出含有glad或me的行,正则表达式为glad|me
  5. 正则表达式与shell下的通配附是两码事,正则表达式有自己的特殊符号,shell的通配符也有自己的特殊符号,有时两者含有相同的特殊符号但是意思却不一样,例如在shell的通配符中*表示任意多个任意字符,而在正则表达式中*表示前面的字符出现0次或多次。有时,在两者中意思一样,但使用的特殊符号不同,例如,在shell中使用?表示必须存在的任意字符,但在正则表达式中 . 表示任意字符。当然也有使用相同符号表示相同含义的,例如\表示转义字符。
下面给出shell环境中的特殊字符和它们的含义,以作区分。

特殊符号

代表意义

#

批注符号,常用在shell script中

\

转义字符

:

连续执行命令的分隔符(与管道分隔符不同)

~

用户的主文件夹

$

使用变量前导符,用来表示一个变量

&

作业控制,将命令变成背景下工作

!

逻辑非

/

路径分隔符

>,>>

数据流重定向,输出导向

<,<<

数据流重定向,输入导向

‘ ’

单引号,不具有变量置换的功能

“ ”

双引号,具有变量置换的功能

` `

反单引号,可以先执行的命令,也可使用$()

( )

中间为子shell的起始与结束

{ }

中间为命令块的组合

通配符

代表意义

*

0到无穷多个任意字符

?

有且仅有一个任意字符

[ ]

有且仅有一个括号内的字符

[-]

有且仅有一个在编码顺序内的所有字符

[^]

反向选择,^表示非得意思





分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP