Linux终端中的文件全局模​​式

时间:2015-11-07 17:38:47

标签: linux glob

我想搜索可能包含 kavi kabhi 的文件名。 我在终端写了命令:

ls -l *ka[vbh]i*

ka i 之间可能有 v bh

我写的代码不正确。什么是正确的命令?

3 个答案:

答案 0 :(得分:3)

一个很好的方法是使用扩展的globs。使用它们,您可以在Bash上执行正则表达式。

首先,您必须启用extglob功能,因为默认情况下已禁用此功能:

shopt -s extglob

然后,编写一个具有所需条件的正则表达式:stuff + ka + vbh + i +东西。一起来:

ls -l *ka@(v|bh)i*

语法与普通正则表达式略有不同,因此您需要在Extended Globs中读取......

  

@(list):匹配给定模式之一。

测试

$ ls
a.php  AABB  AAkabhiBB  AAkabiBB  AAkaviBB  s.sh
$ ls *ka@(v|bh)i*
AAkabhiBB  AAkaviBB

答案 1 :(得分:2)

您可以在bash中使用curly braces获得所需内容:

ls -l *ka{v,bh}i*

注意:这不是一个正则表达式问题,而是一个" shell globbing"题。 Shell" glob模式"与正则表达式不同,尽管它们在很多方面都相似。

答案 2 :(得分:1)

稍微长一点的cmd行可能会使用find,grep和xargs。它的优点是可以轻松扩展到不同的搜索术语(通过扩展grep语句或使用find的其他选项),更具可读性(imho)和灵活性,能够对找到的文件执行特定命令

find . | grep -e "kabhi"  -e "kavi" | xargs ls -l