当前位置: 技术问答>linux和unix
linux 正则表达式
来源: 互联网 发布时间:2016-11-24
本文导语: 任意字符应该用 .* 表示 grep 命令 和 expr命令 后跟的正则表达式可以用单引号括起来,也可以用双引号扩起来,也可以不用引号。配对的双引号括起的内容中保留了元字符$和反引号,只允许变量替换和命令替换。...
任意字符应该用 .* 表示
grep 命令 和 expr命令 后跟的正则表达式可以用单引号括起来,也可以用双引号扩起来,也可以不用引号。配对的双引号括起的内容中保留了元字符$和反引号,只允许变量替换和命令替换。单引号内的所有字符都不再解释为元字符。
问题:
expr abc : .*
结果是3;这个命令为什么是正确的? 转义了*,*不就是普通的字符了么,为什么从结果来看起到了正则表达式中*的作用?
我觉得应该写成expr abc : .* 但是这样是错的。表示成为expr abc : '.*' 或者 expr abc : ".*"都是正确的。为什么呢?
不加引号的正则表达式,元字符遇到转义符,应该失去其特殊含义啊?
grep 命令 和 expr命令 后跟的正则表达式可以用单引号括起来,也可以用双引号扩起来,也可以不用引号。配对的双引号括起的内容中保留了元字符$和反引号,只允许变量替换和命令替换。单引号内的所有字符都不再解释为元字符。
问题:
expr abc : .*
结果是3;这个命令为什么是正确的? 转义了*,*不就是普通的字符了么,为什么从结果来看起到了正则表达式中*的作用?
我觉得应该写成expr abc : .* 但是这样是错的。表示成为expr abc : '.*' 或者 expr abc : ".*"都是正确的。为什么呢?
不加引号的正则表达式,元字符遇到转义符,应该失去其特殊含义啊?
|
这里的expr是通过冒号选项计算字符串中字符数。
expr abc : .*,这里的*不是乘法,而是表示重复次数,重复0次或多次,因而要加,也可以用引号把后面的引起来
expr abc : .*,这里的*不是乘法,而是表示重复次数,重复0次或多次,因而要加,也可以用引号把后面的引起来
|
因为如果没有引号或者转义,里面的*首先会被你使用的shell扩展
那么就不是你预想的expr命令了
你可以打开跟踪选项看看
set -x
expr abc : .*
那么就不是你预想的expr命令了
你可以打开跟踪选项看看
set -x
expr abc : .*