通配符&正则表达式

通配符

通配符是系统级别的 ⽽而正则表达式需要相关⼯工具和语⾔言的⽀支持: egrep, awk, vi,perl

当您键入 ls .txt 命令并按 Enter 后,寻找哪些文件同 .txt 模式相匹配的任务不是由 ls 命令,而是由 shell 自己完成。这需要对命令行是如何被 shell 解析的作进一步解释。当您键入:

通配符语法:*
* 将与零个或多个字符匹配。这就是说什么都可以。例子:

/etc/g* /etc 中以 g 开头的所有⽂文件匹配。
/tmp/my*.txt /tmp 中以 my 开头,并且以 .txt 结尾的所有⽂文件匹配。


$ ls *.txt
      readme.txt  recipes.txt

该命令首先被分割成一系列单词(本例中的 ls .txt)。当 shell 在某个单词中发现了 ,它会将整个单词当作通配模式解析,并用所有相匹配的文件替换它。因此,该命令在执行前就变为 lsreadme.txt recipe.txt,而这将得到期望的结果。其余通配符有:

通配符语法:?
? 与任何单个字符匹配。例子:

通配符语法:[] [!]

该通配符与 ? 相似,但允许指定得更确切。要使用该通配符,把您想要匹配的所有字符放在 []内。结果的表达式将与 [] 中任一字符相匹配。您也可以用 - 来指定范围,甚至还可以组合范围。

[...]:同方括号中的任意一个字符相匹配。这些字符可以用字符范围(比如 1-9)或者离散值或同时使用两者表示。例如:[a-zBE5-7] 同所有 a z 之间的字符和 BE567 相匹配。

[!...]:与所有不在方括号中的某个字符匹配。例如 [!a-z] 同某个非小写字母相匹配[5];

myfile? 与⽂文件名为 myfile 后跟单个字符的任何⽂文件匹配。
/tmp/notes?txt 将与 /tmp/notes.txt /tmp/notes_txt 都匹配,如果它们存在。


例子:


myfile[12] 将与 myfile1 myfile2 匹配。只要当前⺫⽬目录中⾄至少有⼀一个这样的⽂文件存在,该通配符就可以进⾏行扩展。

rm myfile[!9] 将删除除 myfile9 之外的名为 myfile 加⼀一个字符的所有⽂文件。


ls /etc/[0-9]* 将列出 /etc 中以数字开头的所有⽂文件。


ls /tmp/[A-Za-z]* 将列出 /tmp 中以⼤大写字⺟母或⼩小写字⺟母开头的所有⽂文件。


{c1,c2}:同 c1 或者 c2 相匹配。其中 c1 c2 也是通配符。因此,您可以使用 {[0-9]*,[acr]}

正则表达式

选择

| 竖直分隔符代表选择。例如“gray|grey”可以匹配greygray

数量限定

+ 加号代表前面的字符必须至少出现一次。(1次、或多次)。例如,“goo+gle”可以匹配googlegoooglegoooogle

? 问号代表前面的字符最多只可以出现一次。(0次、或1次)。例如,“colou?r”可以匹配color或者colour

* 星号代表前面的字符可以不出现,也可以出现一次或者多次。(0次、或1次、或多次)。例如,“0*42”可以匹配42042004200042等。

匹配圆括号可以用来定义操作符的范围和优先度。例如,“gr(a|e)y”等价

“gray|grey”,“(grand)?father”匹配fathergrandfather。上述这些构造子都可以自由组合,因此,“H(ae?|b)ndel”“H(a|ae|b)ndel”是相同的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值