当前位置: 主页 > JAVA语言

java文件名特殊字符-通配符与正则表达式的处理方法以及使用方法

发布时间:2023-07-05 22:04   浏览次数:次   作者:佚名

当在使用命令行时,有很多时间都用来查找你所需要的文件,如ls find等。Shell提供了一套完整的字符串模式匹配规则,或者称之为元字符java文件名特殊字符,当Shell遇到上述字符时,就会把它们当作特殊字符,而不是文件名中的普通字符,这样用户就可以用它们来匹配相应的文件名,我理解这可以称为通配符

通配符与正则表达式是有区别的,简单来说:通配符是用来通配的,正则表达式是用来匹配字符串的;

在文本过滤工具里,都是用正则表达式,比如像awk,sed,grep等,是针对文件的内容的。

而通配符多用在文件名上,比如查找find,ls,cp,等等。

其次,shell对通配符与正则表达式的处理也有不同,“ ”内一般为通配符(是shell本身提取处理),‘ ’内一般为正则表达式(shell会将其中的数据传递给其它命令处理)。

1、“*”代表任意多个字符

例:查询以“.log”结尾的文件

11*.log

2、“?”代表单个字符,连续使用多个元字符“?”可以表示多个任意字符

例:

1.使用a?表示以a开头且有两个字符的文件名

#ls -l a?

2.查看当前目录下由字母a和任意两个字符组成的文件名

#ls -l a??

3.查看当前目录下所有第3个字符是c的文件

#ls -l ??c*

3、“[ ]"代表“[”和“]”之间的某一个字符,比如[0-9]可以代表0-9之间的任意一个数字,[a-zA-Z]可以代表a-z和A-Z之间的任意一个字母,字母区分大小写。

例:

1.如果范围匹配符中出现的是几个字符的组合java文件名特殊字符,表示匹配其中的任何一个字符。

例如要在当前目录中查看以字母klsyz中的任意一个开头的所有文件

#ls -l [klsyz]*

2.使用多个通配符可以进行更加复杂的匹配查找。

例如要在当前目录中查看以字母a开头且倒数第2个字符为字母cde中任意一个的所有文件

#ls -l a*[cde]?

3.使用符号“-”可以匹配一个字母或数字范围。

例如要在当前目录下查看文件名中含有数字的所有文件

#ls -l *[0-9]*

上面的命令中[0-9]表示匹配0到9之间的任意数字

4.要查看当前目录下文件名由两个字符组成且第2个字符是字母的所有文件

[a-Z]表示所有小写字母、大写字母

#ls -l ?[a-Z]

[a-Z]表示所有字母,也可以使用[a-zA-Z]表示所有字母

4、[!]和[^]表示匹配结果取反的意思,注意这个通配符必须要在[]中使用

例:

1.要查看当前目录下文件名只有两个字符并以数字开头且第2个字符不是数字的所有文件

#ls -l [0-9][!0-9]

2.要查看当前目录下文件名只有两个字符且两个字符都不是字母的所有文件

#ls -l [!a-Z][!a-Z]

在上面的命令中[!a-Z]表示排除小写字母a-z和大写字母A-Z,即排除所有字母

3.查询不是以“.txt”结尾的文件

ll *[^txt]*