Shell Globbing - 通配符匹配问题

时间:2017-05-17 07:22:54

标签: regex shell command-line terminal matching

我正在尝试编写一个模式,该模式将匹配包含以下内容的目录中的任何文件名:数字,后面紧跟字母“e”或“h”。 (例如:3e.txt)

我需要在终端/ shell中测试这些模式。我尝试过编写几种模式,但是他们都无法找到我故意放在工作目录中测试模式的3e.txt和3h.txt文件。

$ ls [0-9[e]*[h]*]?
$ ls [0-9][e]?

我对shell很新,所以我不确定我是否正确使用通配符。如何更正我的模式,使其与我要搜索的文件名相匹配?

3 个答案:

答案 0 :(得分:0)

大多数shell不支持正则表达式。您可以在ls中管道egrep进行模式匹配:

$ ls | egrep '[0-9][eh]'

答案 1 :(得分:0)

ls不支持模式的正则表达式语法。您需要将ls输出重定向到某个正则表达式工具,例如grep:

ls | grep '[0-9][eh]'

请注意,您需要的模式实际上是[0-9][eh],这是一个数字后跟eh

这将列出所有带有数字的文件,后跟eh,即使在名称的中间。如果您只需要使用此序列开始的文件,请将^添加到正则表达式:

ls | grep '^[0-9][eh]'

答案 2 :(得分:0)

这是一个与 <?php $query1=mysql_query("SELECT `a_id`,`a_name` FROM `photo_album`"); while ($run=mysql_fetch_array($query1)){ $album_id =$run['id']; $album_name=$run['name']; $query2= mysql_query("SELECT `url` FROM `photo_gal` WHERE `album_id`='$album_id'"); $run1 = mysql_fetch_array($query2); $pic = $run1['url']; while($ft=mysqli_fetch_array($query)){ ?> 3e.txt但不是2h.txt等模式匹配的正则表达式。

3eh.txt

这意味着“由单个'e'或'h'后缀的任何数字,带有.xxx后缀”

Try it on regex101