我想搜索可能包含 kavi 或 kabhi 的文件名。 我在终端写了命令:
ls -l *ka[vbh]i*
在 ka 和 i 之间可能有 v 或 bh 。
我写的代码不正确。什么是正确的命令?
答案 0 :(得分:3)
一个很好的方法是使用扩展的globs。使用它们,您可以在Bash上执行正则表达式。
首先,您必须启用extglob
功能,因为默认情况下已禁用此功能:
shopt -s extglob
然后,编写一个具有所需条件的正则表达式:stuff + ka
+ v
或bh
+ 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