正则表达式与Linux通配符

正则表达式与通配符

  • 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed

    等命令可以支持正则表达式。

  • 通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支

    持正则表达式,所以只能使用shell自己的通配符来进行匹配。


Linux通配符

通配符是由shell处理的(不是由所涉及到命令语句处理的,其实我们在shell各个命令

中也没有发现有这些通配符的介绍),它只会出现在命令的“参数”里。shell会将其当作

路径或文件名去在磁盘上搜寻可能的匹配;若符合要求的匹配存在,则进行代换;否则

就将该通配符作为一个普通字符传递给命令,然后再由命令进行处理。

总之,通配符实际上就是一种shell实现的路径扩展功能,在通配符被处理后,shell会

先完成该命令的重组,然后再继续处理重组后的命令,直至执行该命令。

shell常见通配符

字符 含义 实例
* 匹配0个或多个字符 a*b a与b之间可以有任意长度的任意字符,也可以一个也没有,例如aabcb,axyzb
? 匹配任意一个字符 a?b a与b之间必须也只能有一个字符,可以是任意字符,例如:aab,acb,a0b
[list] 匹配list中的任意一个字符 a[xyz]b a与b之间必须也只能有一个字符,但只能是list中的,例如:axb,ayb,azb
[!list] 匹配非list中的任意一个字符 a[!0-9] a与b之间必须也只能有一个字符,但不能是list中,例如:axb,acb,a-b
[c1-c2] 匹配c1-c2中的任意一个字符 a[0-9] 在c1到c2间匹配一个字符
{string1,string2,...} 匹配string1或string2其一字符串 a{abc,xyz,123}b a与b之间只能是{}中的字符串。

:通配符看起来有点像正则表达式语句,但是它与正则表达式不同,不能相互混淆。

把通配符理解为shell特殊代号字符就可。而且涉及的只有:*,?,[],{},这几种。


基础正则表达式

元字符 作用
* 前一个字符匹配0次或任意多次
. 匹配除了换行符外任意一个字符
^ 匹配行首。例如:^hello会匹配以hello开头的行。
$ 匹配行尾。例如:hello$会匹配以hello结尾的行。
[] 匹配方括号中指定的任意一个字符,制匹配一个字符。例如:[aoeiu]匹配任意一个元音字母,[0-9]匹配任意一位数字,[a-z][0-9]匹配小写字字母和一位数字构成的 两位字符。
[^] 匹配除方括号中字符以外的任意一个字符。例如:[^0-9]匹配任意一位非数字字符。[^a-z]表示任意一位非小写字母。
\ 转义符。用于取消特殊符号的含义。
\{n\} 表示前面的字符恰好出现n次。例如:[0-9]\{4\}匹配4位数字。
\{n,\} 表示其前面的字符出现不小于n次。例如:[0-9]\{2,\}表示两位及以上的数字。
\{n,m\} 表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]\{6,m\}匹配6到8位的小写字母。

语系对正则表达式的影响

由于不同语系的编码表不同,所以会造成我们获取数据的差异。例如:

LANG = C :0 1 2 3 4 5 ... A B C D E ..... Z a b c d e ....z

LANG = zh_TW.big5 : 0 1 2 3 4 5 ..... A a B b C c D d ...Z z

此时 ,如果你想要获取大写字母而实用[A-Z]时,LANG = C会很容易取出大写字母(因为码表A-Z是连续的,中间并没有其他字符),而对zh_TW.big5,会发现 a - z 也同样被取出来了。这是因为对于LANG = zh_TW.big5 编码a - z 是混在A- Z中间的。所以,在使用正则表达式时,一定要留意语系问题!

为避免语系对正则表达式的干扰,应尽量使用正则表达式所提供的特殊字符 :

原文地址:https://www.cnblogs.com/pulp/p/9742291.html

时间: 2024-10-10 14:30:21

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

菜鸟的成长记录--linux 通配符和特殊字符集合的使用

通配符 当需要用命令查询所需要的结果时,用户不必全部查出一个一个找,可以使用Shell通配符.Shell命令的通配符含义如下表 符号 含义 实例 * 任意长度的任意字符 a*b,匹配如a3b.acb.aabc.a/b.a123,/b. ? 匹配任意单字符 a?b,匹配如a1b.acb.a,b [ ] 匹配指定范围内的任意字符 a[xyz]b,匹配如axb.ayb.azb [ - ] 匹配任意一个字符范围 a[a-z]b,匹配如ayb.acb.adb.aub [^...] 除了指定的字符,均可匹配

linux通配符,grep和 egrep区别

前些天写字符串匹配的脚本,如下:  1 #!/bin/sh 2 3 echo"path: /home/appadmin/workspace" 4 echo"usage: "$0" [h|cpp|both|all] string_symbol" 5 echo"space use: grep ' 'str" 6 7 if [ $1 = 'h']; 8 then 9 find . -name"*\.h" | xa

Linux通配符与特殊符号知识大全汇总

符号 作用 Linux通配符 * 匹配任意(0个或多个)字符或字符串,包括空字符串 ? 匹配任意1个字符,有且只有一个字符 [abcd] 匹配abcd中任何一个字符,abcd也可是其他任意不连续字符 [a-z] 匹配中a到z之间的任意一个字符, a到z表示范围,字符前后要连续,-表示范围的意思,也可以用连续数字[1-9] [!abcd] 同[^abcd],表示不匹配括号里面的任何一个字符,也可为[!a-d] Linux特殊符号:路径和位置相关 ~ 用户的家目录,超级用户为/root,普通用户为/

Linux通配符与特殊符号知识大全

符号 作用 Linux通配符 * 匹配任意(0个或多个)字符或字符串,包括空字符串 ? 匹配任意1个字符,有且只有一个字符 [abcd] 匹配abcd中任何一个字符,abcd也可是其他任意不连续字符 [a-z] 匹配中a到z之间的任意一个字符, a到z表示范围,字符前后要连续,-表示范围的意思,也可以用连续数字[1-9] [!abcd] 同[^abcd],表示不匹配括号里面的任何一个字符,也可为[!a-d] Linux特殊符号:路径和位置相关 ~ 用户的家目录,超级用户为/root,普通用户为/

linux通配符含义

linux通配符含义: .    当前目录**** ..   当前目录的上一级目录**** *    通配符,代表任意0个或多个字符***** ?   通配符,代表重复0个或一个0前面的字符 :    连续不同命令的分隔符***** #    配置文件注释***** |    管道***** ~    用户的家目录***** -    上一次的目录***** $    变量前需加的符号 /    路径分隔符 >或1>   重定向,覆盖***** >>      追加重定向,追加**

linux通配符和正则表达式 + notepad++

http://blog.csdn.net/pipisorry/article/details/24143801 通配符(bash 操作) 在 bash 操作环境中还有一个非常有用癿功能,那就是通配符 (wildcard) ! 用 bash 处理数据就更方便了! 常用通配符 除了通配符外,bash 环境中的特殊符号 Note: 1. 理论上,你的『档名』尽量不要使用上述字符 2. 如bash命令find可以使用通配符 正则表达式 正则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊

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 通配符使用小结

首先,通配符是shell提供的一种路劲扩展功能.在linux的shell中,要区分通配符和正则表达式的区别. 简单理解,通配符是用来匹配文件名的.而正则表达式是用来匹配文件内容的. 了解通配符,首先,需要熟记通配符中的元字符: *:表示匹配任意长度的任意字符.需要注意任意长度,包括零长度,即没有字符的情况 ?:匹配一个任意字符,只能匹配一个字符 范围匹配: [0-9]:表示匹配数字 [a-z]:表示匹配小写字母 [A-Z]:表示匹配大写字母 范围匹配取反: [^0-9]:表示匹配非数字 [^a-

Linux通配符知识深度讲解

注意:linux统配符合三剑客(grep,awk,sed)正则表达式是不一样的,因此,代表的意义也是有较大区别的.通配符一般用户命令bash环境,而linux正则表达式用于grep,sed,awk场景. * - 通配符,代表任意(0到多个)字符?- 通配符,代表任意1个字符:- 连续不同命令的分隔符# - 配置文件注释| - 管道~ - 用户的家目录- - 上一次的目录$ - 变量前要加的符号/ - 路径分割符号>或1> - 重定向,覆盖>> - 追加重定向,追加.< - 输