Ubuntu基本的正则表达式元字符集合及意义

 
符号                                                意义
 
“*”——————用于匹配前面一个普通字符的0次或多次重复;
 
“.”——————用于匹配任意一个字符;
 
“^”——————用于匹配首行,表示行首的字符时“^”字符后的的那个字符(或字符串);
 
“$”——————用于匹配首尾,$符号放在匹配字符之后,与“^”符号的功能和用法都相反;
 
“[]”——————用于匹配字符集合,该符号支持穷举方法列出字符集合的所以元素,也支持
 
                    使用“-”符号表示字集合范围,表明字符集合范围从“-”左边字符开始,
 
                     到“-”右边字符结束;
 
        example-01:
 
         穷举方法列出字符集合:sudo find /etc/  -name *.conf | grep [abc]
 
         用“-”符号表示字集合范围: sudo find /etc/  -name *.conf | grep [a-d]
 
        example-02:
 
        sudo find /etc/  -name *.conf | grep [^a-d]
 
        上面例子中的“^”表示取反的意思,不再是匹配行首字符的意思了;
 
“\”——————是转义符,用于屏蔽一个元字符的特殊意义,及以字面含义按字符来解释“\”符号
 
                   后面的元字符;
 
        example:
 
        sudo find /etc/  -name *.conf | grep \.
 
        上面例子中的“.”符号不再表示匹配任意一个字符的意思,而仅仅表示字符本身。
 
“\<\>”——————是精确匹配符号,该符号利用“\”符号屏蔽“<>”符号;
 
“\{\}”——————系列符号与“*”类似,都是表示前一个字符的重复。但是,“*”符号表示重复0次
 
                        或任意 次,而“\{\}”系列符号可以指定重复的次数,
 
        “\{\}”系列符号包括以下三种形式。
 
        1、\{n\}:匹配前面字符出现n次;
 
        2、\{n,\}:匹配前面字符至少出现n次;
 
        3、\{n,m\}:匹配前面字符出现n到m次。



正则表达式

正则表达式和shell通配符一样也包含许多特殊字符,除了这些特殊字符之外其余的全是原义字符。

特殊字符

字符作用
^1.^在字符串开头时表示文本开头
2.^在[]中的第一个位置时表示否定,其他位置时是普通字符
$1.字符末尾
2.变量值获取
.任意单个字符
[]括号中的任意一个单个字符,特殊字符在[]中失去特殊含义,除了^和-在指定的位置时。
{}匹配特定的次数(重复)。在bash中还可以表示命令集合或者目录分隔。
-在[]中非第一个和最后一个位置时表示范围。具体的值和特定的语系有关。
?表示0个或一次(重复)
*任意多次重复(重复)。在bash中代表任意长度的任意字符串。
+至少一次的重复(重复)
()分组符。在bash中表示子shell指定的命令。
|逻辑或。在bash中表示管道。
\特殊字符转义符。

当我们在bash中传递包含元字符的正则表达式的时候,把特殊字符用单引号引起来至关重要,这样可以阻止 shell 试图展开它们。

下面就来解释一下语系与正则表达式[]范围的关系:

正则表达式是处理字串的表示方式,那么对字符的排序有影响的语系配置就会对正则表达式产生影响。

举例来说,英文和数字的编码顺序在en_US.utf8及 C 这两种语系的输出结果分别如下:
LANG=C:0 1 2 3 4 ... A B C D ... Z a b c d ...z
LANG=en_US.utf8:0 1 2 3 4 ... a A b B c C d D ... z Z

从上面可以发现不同的语系中字符的排序是不一样的。如果你想要获取大写的字符而使用[A-Z] 时,会发现LANG=C(或者POSIX)时是连续的大写字符。

\

但是如果使用en_US.utf8时,会发现会取出除了小写a以外的所有字母。因为排序的顺序是【A b B c C d D ... z Z】。

\

所以,使用这则表达式时,需要特别留意当时环境的语境是什么,否则会发现获取的结果和别人是不一样的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值