linux使用换行转义字符串,Linux基础命令(14)通配符、转义符、正则表达式

本文详细介绍了Shell中的通配符及其作用,解释了如何通过通配符进行文件匹配和路径扩展。同时,文章探讨了正则表达式的概念和常用特殊字符,包括*、?、[]等,并举例说明了它们在匹配字符串时的不同行为。此外,还提到了转义字符的使用,以确保特殊字符在必要时能作为普通字符处理。文章最后通过示例展示了正则表达式在实际操作中的应用,如在文件查找和内容筛选中的功能。
摘要由CSDN通过智能技术生成

释放双眼,带上耳机,听听看~!

通配符

通配符是由shell处理的, 它只会出现在 命令的“参数”里。当shell在“参数”中遇到了通配符时,shell会将其当作路径或文件名去在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。总之,通配符 实际上就是一种shell实现的路径扩展功能。在 通配符被处理后, shell会先完成该命令的重组,然后再继续处理重组后的命令,直至执行该命令。

SHELL中的通配符

帮助手册:# man 7 glob

*匹配任意长度的任意字符,可以是0个

?匹配任意单个字符,必须是1个

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

[a-z,A-Z,0-9]匹配所有数字字母,可以不加逗号

[a-z]表示a-z,A-Y,表示a,A,b,B…..a。不包含Z

[A-Z]表示A,b,B…..z,Z。不包含a

[a-Z]表示所有大小写字母

[:upper:]所有大写字母

[:lower:]所有小写字母

[:alpha:]所有字母,大小写

[:digit:]所有数字

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

[:blank:]水平空白字符

[:space:]水平或垂直空白字符

[:punct:]标点符号

[:print:]可打印字符

[:cntrl:]控制(非打印)字符

[:graph:]图形字符

[:xdigit:]十六进制字符

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

[^0-9]相当于[^[:digit:]]

[^a-z]表示Z + 其他

[^A-Z]表示a + 其他

示例:

搜索/etc/目录下以“.d”结尾的目录及文件,并列出详细信息:ls -l /etc/*.d

%E9%80%9A%E9%85%8D%E7%AC%A61.png

删除当前目录下所有文件及目录:rm -rf *

%E9%80%9A%E9%85%8D%E7%AC%A62.png

有1-100整数的文件,列出2、3、4,列出 2 、3、4开头 5、6结尾的所有文件

%E9%80%9A%E9%85%8D%E7%AC%A63.png

以?搜索文件

%E9%80%9A%E9%85%8D%E7%AC%A64.png

列出2以外的文件

%E9%80%9A%E9%85%8D%E7%AC%A65.png

转义字符

有时候,我们想让 通配符,或者元字符 变成普通字符,不需要使用它。那么这里我们就需要用到转义符了。 shell提供转义符有三种。

字符说明

‘’(单引号)硬转义,其内部所有的shell 元字符、通配符都会被关掉。

“”(双引号)软转义,其内部只允许出现特定的shell 元字符:$用于参数替换 `(反单引号,esc键下面)用于命令替换

\(反斜杠)又叫转义,去除其后紧跟的元字符或通配符的特殊意义

示例

%E8%BD%AC%E4%B9%89%E7%AC%A6.png

正则表达式

正则表达式基础

概念

正则表达式,又被正规表示式、正规表示法、针对表达式、规格表达式、常规表达法(Regular Expression,或regex、regexp、RE)。正则表达式使用单个字符来描述、匹配一系列符合某个句法规则的字符串。在很多编辑器里,正则表达式通常用来检索、替换那些符合某个模式的文本。

注意区分正则表达式与通配符的差别。

例子:

一个文件中,包含“shiguang”和“shiyan”这两个字符,同样一个表达式:shi*

如果上述表达式作为正则表达式,它将只能匹配shi;而如果不是正则表达式,而是作为一个通配符,则将同时匹配两个字符串。

原因:在正则表达式中,*表示匹配前面的子表达式零次或多次,比如它可以匹配”sh”,”shi”,”shii”,”shishi”等等,而作为通配符,*表示匹配通配符后面任意多个字符,所以可以匹配文本中的字符串。

选择

|表示分割,比如: boy | gril可以匹配“boy”或者“girl”

在正则表达式的使用过程中,一些字符是以特定方式处理的。最常使用的特殊字符如下:

字符表示*匹配前一个字符0-任意次。

+匹配前一个字符1-任意次。

?匹配前一个字符0或1次。

.匹配换行符以外任意一个字符

^匹配首。^baozi表示以baozi开头的。

$匹配尾。baozi$表示以baozi结尾的。

[]匹配括号中任意一个字符。

[^]匹配[]取反。

\转义符。

\{n\}匹配n次。

\{n,\}匹配不小于n次。

\{n,m\}匹配最小n次,最多m次。

\d任意数字

\w任意字母、数字、_

\s任意空白字符

#从左到右匹配,删掉第一个

##从左到右匹配,删掉全部

%从右开始,与#相反

%%从右开始,与##相反如果想将上述字符用作普通字符,就需要在它们前面加上\字符。例如,如果想使用$字符,你需要将它写为\$

在方括号中还可以使用一些有用的特殊匹配模式,如下:

匹配模式含义

[:alnum:]字母与数字字符,如grep[[:alnum:]] words.txt

[:alpha:]字母

[:ascii:]ASCII字符

[:blank:]空格或制表符

[:cntrl:]ASCII控制字符

[:digit:]数字

[:graph:]非控制、非空格字符

[:lower:]小写字母

[:print:]可打印字符

[:punct:]标点符号字符

[:space:]空白字符,包括垂直制表符

[:upper:]大写字母

[:xdigit:]十六进制数字

示例

在/etc/中匹配d为首的文件,匹配d为结尾的文件

%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F1.png

ls .* :其中“.”表示任意字符,“*”表示任意长度。所以第一行可以列出隐藏文件,第二行就是所有文件(相当于“ls . 或 ls”),第三行则是上一目录的文件(相当于“ls ..”)。而“.”三个的时候,ls …以上就没有意义,命令错误了,所以不再显示。

%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F2.png

将/etc/passwd文件做输出保存在当前目录下继续用于做测试。其中cat test99.txt | grep “^a….e”匹配test99.txt中以a开头的行,并且向后任意4个字符,第五个为e。

%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F3.png

%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F4.png

a[dv]匹配的是ad,av

%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F5.png

“[^]”表示取反,意思是匹配除此以外的字符。”a[^dv]”则会匹配ad,av,以外的字符

%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F6.png

其中”10{2}”表示匹配两个0, “10{2,}”表示匹配两个及两个以上的0.

%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F7.png

“\s{1,\}”其中“\s”表示空格,“{1,}表示匹配1次及以上”

%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F8.png

“\w”表示所有字符

%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F9.png

[:digit:]表示数字

%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F10.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值