Linux中的通配符和正则表达式

通配符:

文件名统配是bash的特性之一,通配符一般用于文件名的匹配。

*   :任意长度的任意字符

?   :匹配任意单字符

[]  :匹配指定范围内的任意单字符

例:[abc], [a-z], [0-9], [0-9a-z]

[^] :匹配指定范围以外的任意单字符

例:[^0-9a-z]

字符集合:

[:space:] :所有空白字符

[:punct:] :所有标点符号

[:lower:] :所有小写字母

[:upper:] :所有大写字母

[:digit:] :所有数字

[:alnum:] :所有数字、字母

[:alpha:] :所有字母

Linux文本处理工具:

grep, egrep, fgrep(用于文件内容匹配,将文件名转换为字符窜也可以用这些工具进行搜索)

文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。

正则表达式:

正则表达式是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能,一般用于文件内容匹配(通配符常用于文件名的匹配),将文件名转换为字符窜也可以用这些工具进行搜索。正则表达式又可分为基本正则表达式和扩展正则表达式。

1)基本正则表达式:grep

2)扩展正则表达式: egrep, grep -E

fgrep: fast, 不支持使用正则表达式(直接查找匹配的内容)

1)基本正则表达式的元字符:

字符匹配:

.  : 匹配任意单个字符(区别于通配符的*)

[]: 匹配指定范围内的任意单个字符

[0-9], [[:digit:]]

[a-z], [[:lower:]]

[A-Z], [[:upper:]]

[[:space:]]

[[:punct:]]

[[:alpha:]]

[[:alnum:]]

[^]:取反。例:[^[:alpha:]],匹配所有的非字母

次数匹配元字符:用于实现指定其前面的字符所能够出现的次数

*: 任意长度,它前面的字符可以出现任意次

例如:x*y

\?: 0次或1次,它前面的字符是可有可无的

例如:x\?y

\{m\}: m次,它前的字符要出现m次

例如:x\{2\}y

\{m,n\}: 至少m次,至多n次

例如:x\{2,5\}y

\{m,\}:至少m次

\{0,n\}: 至多n次

.*:任意长度的任意字符(工作于贪婪模式:尽可能多的去匹配)

位置锚定:

^: 行首锚定;

写在模式最左侧

$: 行尾锚定;

写在模式最右侧

^$: 空白行

匹配单词(不包含特殊字符的连续字符组成的串):

\<: 词首,出现于单词左侧,\b

\<char(或者\bchar)

\>: 词尾,出现于单词右侧, \b

char\>(或者char\b)

分组:

\(\)

例如:\(ab\)*

分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用

引用:

\#: 引用第n个括号所匹配到的内容,而非模式本身

例如:

\(ab\?c\).*\1    括号匹配到的内容是abc,所以后面\1只匹配abc

命令选项(grep):

-v: 反向选取

-o: 仅显示匹配的字串,而非字串所在的行

-i: ignore-case,忽略字符大小写

-E: 支持使用扩展正则表达式

-A # 显示前几行

-B # 显示后几行

-C # 显示上下几行

2)扩展正则表达式(无需转义字符):

字符匹配:

.

[]

[^]

次数匹配:

*     :任意次

?     :0次或1次

+     :至少1次;(相对于基本正则多出的一项)

{m}   : 精确匹配m次

{m,n} : 至少m次,至多n次

{m,}  :至少m次

{0,n} :最多n次

锚定:

^ :行首锚定;

$ :行尾锚定;

\<, \b(这里任然需要转义)

\>, \b(同上)

^$, ^[[:space:]]*$

分组:

()

引用:\1, \2, \3(同基本正则表达式)

注意:

a|b: a或者b

conC|cat:conC或cat

con(C|c)at:concat或conCat

扩展正则表达式的使用:

grep -E  ‘PATTERN‘ FILE...

egrep ‘PATTERN‘ FILE...

时间: 2024-11-05 16:56:30

Linux中的通配符和正则表达式的相关文章

Linux中grep、egrep正则表达式的使用

正则表达式的由来 正则表达式,英文写法Regular Expression,在编程语言中常被简写为regex.regexp等.它是用来描述.匹配一系列符合某个句法规则字符串的单个字符串. 正则表达式通常被用来检索.替换那些符合某个模式(Pattern)的文本. 1950年代,UNIX之父Ken Thompson将正则表达式引入编辑器QED,然后是编辑器ed,最终引入到grep中.从此,正则表达式被广泛地应用到了各种UNIX或类UNIX系统的工具之中,例如perl. 近些年来,主流操作系统.主流开

linux中的通配符、元字符、转义符

linux中的通配符.元字符.转义符 linux中的通配符元字符转义符 shell命令的构成 通配符 元字符meta 转义符 example reference shell命令的构成 每条linux命令中的每一个character都是下面两种之中的一个: - literal:普通纯文本 - 保留字:通配符.元字符.转义字符 通配符 通配符是由shell处理的(不是由所涉及到命令语句处理的.事实上我们在shell各个命令中也没有发现有这些通配符介绍), 它仅仅会出如今命令的"參数"里(它

linux中的逻辑运算和正则表达式

1.与.或.非.异或 && 与:当两边同为真的时候,结果为真 || 或:当两边都为假的时候,结果为假. ! 非:取反 ^ 异或:当左右都相同的时候,结果为假:当左右不相同的时候,结果为真 2.短路运算:在特殊情况下只运算逻辑运算符即可出结果,即可停止运算 &&:当左边为假的时候,结果必然为假.在shell中,只运行左边命令,不运行右边的命令 ||:当左边为真的时候,结果必然为真.在shell中,只运行左边命令,不运行右边命令 eg:ls /etc && ec

Linux中grep,egrep正则表达式基本用法

正则表达式 本人第一次写博文.由于最近刚好学到了正则表达式基本使用方法.整理了一下,以后用于回顾查找. 正则表达式基本说明: 基本来说,正则表达式式一种用来描述一定数量文本的模式,正则表达式的简写为REGEX 全称Regular Express. 首先正则表达式对于Linux运维工程师来说非常重要,这将伴随每一个运维工程师的职业生涯.说到正则表达式那么不得不说一下grep和egrep,grep全称是Globally search for a Regular Expression and prin

带你认识Linux中的通配符

通配符是一种特殊语句,用来模糊搜索文件,当查找文件夹时,可以使用它来代替一个或多个真正的字符,它使得文件管理更加快速,便捷,大大的提升了工作效率. 常用的通配符有 * .? .[] 等(可通过man 7 glob的帮助文档来查看所有通配符) 1,* 代表任意长度的任意字符: 示例:ls -d /etc/a* 显示/etc目录下所有以a开头的文件与目录: 2,? 表示任意单个字符: 示例: ls a?b 显示当前目录下所有以a开头中间有一个字符b结尾的文件,a10b中间夹2个字符,因此不显示: 3

linux通配符与正则表达式

通配符 *  任意字符,可重复多次 ? 任意字符,重复一次 [] 代表一个字符 举例: [a,b,c] 表示abc中任意一个 通配符的作用是用来匹配文件名的 正则表达式 正则表达式是在文件中匹配符合条件的字符串的 ls find cp是不支持正则表达式的 但是grep awk sed支持正则表达式 [[email protected] test]# touch aa [[email protected] test]# touch aab aabb [[email protected] test]

linux 中的正则表达式用法小结

首先:在linux中 ,正则表达式是针对文件内容而言的.查用在shell的grep,sed ,awk等相关命令之中. 正则表达式的元字符: .  : 表示任意字符 字符次数锚定: * : 表示* 之前的字符或模式出现任意次,其中包括0次 ?:   表示?之前的字符出现0次或一次,需要注意的是,在linux中需要是\?. \{m,n\}:表示其前面的字符或模式出现至少m次,至多n次 \{m,\}: 表示其前面的字符至少出现m次 \{0,n\}:表示其前面的字符至多出现n次 位置锚定: ^: 表示以

linux终端中的通配符

通配符是一种特殊语句,主要有星号(*)和问号(?),用来对对字符串进行模糊匹配(比如文件名,参数名).当查找文件夹时,可以使用它来代替一个或多个真正字符:当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符. 终端里面输入的通配符是由 Shell 处理的,不是由所涉及到命令语句处理的,它只会出现在命令的"参数值"里(它不用在 命令名称里, 命令不记得,那就用Tab补全).当 Shell 在"参数值"中遇到了通配符时,Shell 会将其当作路

*在通配符及正则表达式中的差别

*在通配符和正则表达式中有其不一样的地方,在通配符中*可以匹配任意的0个或多个字符,而在正则表达式中他是重复之前的一个或者多个字符,不能独立使用的.比如通配符可以用*来匹配任意字符,而正则表达式不行,他只匹配任意长度的前面的字符. 基本上解释就是通配符是系统命令使用(ls cp等),一般用来匹配文件名或者什么的用在系统命令中.而正则表达式是操作字符串,以行尾单位来匹配字符串使用的(sed gawk grep等).