当前位置: 技术问答>linux和unix
关于通配符和正则表达式
来源: 互联网 发布时间:2017-02-23
本文导语: “ * ”这个符号,在被当做通配符时和被当做正则表达式的时候的解释是完全不同的。那么当我使用一个支持正则表达式的程序时,用到了*号,那它默认会被认为是通配符还是正则表达式?如果默认为正则表达式的...
“ * ”这个符号,在被当做通配符时和被当做正则表达式的时候的解释是完全不同的。那么当我使用一个支持正则表达式的程序时,用到了*号,那它默认会被认为是通配符还是正则表达式?如果默认为正则表达式的话,就相当于支持正则表达式的程序都不支持通配符了?这样的话,在我想要使用通配符的时候,还得要提前看看我使用的程序是不是支持正则表达式,如果确认不支持才能用通配符?
|
”默认为正则表达式的话,就相当于支持正则表达式的程序都不支持通配符“是这样的。
Regular Expressions
r* matches zero or more r's.
正则表达式中不支持通配符,要达到通配符的效果可以使用”.*“。
Regular Expressions
r* matches zero or more r's.
正则表达式中不支持通配符,要达到通配符的效果可以使用”.*“。
|
wildcard 只用于shell的cmd line 的path 参数(目录名,文件名);
对于非shell的应用而言,没有wildcard的概念;
那么当我使用一个支持正则表达式的程序时,用到了*号,那它默认会被认为是通配符还是正则表达式?
若非shell应用,*会被认为是正则表达式;
若为shell,并且* 在路径参数什么,shell做解释;否则,shell不对其进行处理,直接传给进程;
如果默认为正则表达式的话,就相当于支持正则表达式的程序都不支持通配符了?
感觉应该区分上下文;
显然shell时支持正则表达式的,也是支持通配符的;
这样的话,在我想要使用通配符的时候,还得要提前看看我使用的程序是不是支持正则表达式,如果确认不支持才能用通配符?
shell会自动区分;
其他非shell只支持正则表达式;
不是非常确定
对于非shell的应用而言,没有wildcard的概念;
那么当我使用一个支持正则表达式的程序时,用到了*号,那它默认会被认为是通配符还是正则表达式?
若非shell应用,*会被认为是正则表达式;
若为shell,并且* 在路径参数什么,shell做解释;否则,shell不对其进行处理,直接传给进程;
如果默认为正则表达式的话,就相当于支持正则表达式的程序都不支持通配符了?
感觉应该区分上下文;
显然shell时支持正则表达式的,也是支持通配符的;
这样的话,在我想要使用通配符的时候,还得要提前看看我使用的程序是不是支持正则表达式,如果确认不支持才能用通配符?
shell会自动区分;
其他非shell只支持正则表达式;
不是非常确定
|
shell只支持通配符。
你使用的awk, sed, egrep支持正则表达式, 它们是独立的程序, 只不过设置了PATH环境变量并放置到/usr下, 于是你感觉像shell命令一样. 你只是借助shell运行这些程序, 传入命令行参数(正则表达式)而已.
linux下C库支持POSIX标准正则,所以一般的linux工具都是POSIX标准的,而不是PERL标准的。如果需要开发自己的正则程序,可以使用regex.h这个系列的POSIX正则接口。
另外,shell执行一个程序时,shell会先对你的命令进行一次过滤,所以需要注意你命令行传入的正则表达式是否会被转移,当使用"时通常你需要做更多的转移工作,当使用'时便不会那么麻烦了. 但有时候我们又希望''内使用shell变量, 但这又是不现实的, 所以必须使用"外加一些额外的转移工作保证正则表达式传入到程序时保持原样.
你使用的awk, sed, egrep支持正则表达式, 它们是独立的程序, 只不过设置了PATH环境变量并放置到/usr下, 于是你感觉像shell命令一样. 你只是借助shell运行这些程序, 传入命令行参数(正则表达式)而已.
linux下C库支持POSIX标准正则,所以一般的linux工具都是POSIX标准的,而不是PERL标准的。如果需要开发自己的正则程序,可以使用regex.h这个系列的POSIX正则接口。
另外,shell执行一个程序时,shell会先对你的命令进行一次过滤,所以需要注意你命令行传入的正则表达式是否会被转移,当使用"时通常你需要做更多的转移工作,当使用'时便不会那么麻烦了. 但有时候我们又希望''内使用shell变量, 但这又是不现实的, 所以必须使用"外加一些额外的转移工作保证正则表达式传入到程序时保持原样.