Linux 终端中的文件全局模式
File Glob Patterns in Linux terminal
我想搜索可能包含 kavi 或 kabhi 的文件名。
我在终端中写了命令:
ls -l *ka[vbh]i*
在ka和i之间可能有v或bh .
我写的代码不正确。正确的命令是什么?
执行此操作的一个好方法是使用扩展的 glob。使用它们,您可以在 Bash.
上执行正则表达式
首先您必须启用 extglob
功能,因为默认情况下它是禁用的:
shopt -s extglob
然后,编写一个具有所需条件的正则表达式:stuff + ka
+ v
或 bh
+ i
+ stuff。总计:
ls -l *ka@(v|bh)i*
语法与普通正则表达式有点不同,因此您需要阅读 Extended Globs 那...
@(list): Matches one of the given patterns.
测试
$ ls
a.php AABB AAkabhiBB AAkabiBB AAkaviBB s.sh
$ ls *ka@(v|bh)i*
AAkabhiBB AAkaviBB
稍长的 cmd 行可以使用 find、grep 和 xargs。它的优点是可以轻松扩展到不同的搜索词(通过扩展 grep 语句或使用 find 的其他选项),更具可读性(imho)和能够对找到的文件执行特定命令的灵活性
find . | grep -e "kabhi" -e "kavi" | xargs ls -l
你可以通过在bash中使用curly braces得到你想要的:
ls -l *ka{v,bh}i*
注意:这不是正则表达式问题,而是 "shell globbing" 问题。 Shell "glob patterns" 与正则表达式不同,尽管它们在许多方面相似。
我想搜索可能包含 kavi 或 kabhi 的文件名。 我在终端中写了命令:
ls -l *ka[vbh]i*
在ka和i之间可能有v或bh .
我写的代码不正确。正确的命令是什么?
执行此操作的一个好方法是使用扩展的 glob。使用它们,您可以在 Bash.
上执行正则表达式首先您必须启用 extglob
功能,因为默认情况下它是禁用的:
shopt -s extglob
然后,编写一个具有所需条件的正则表达式:stuff + ka
+ v
或 bh
+ i
+ stuff。总计:
ls -l *ka@(v|bh)i*
语法与普通正则表达式有点不同,因此您需要阅读 Extended Globs 那...
@(list): Matches one of the given patterns.
测试
$ ls
a.php AABB AAkabhiBB AAkabiBB AAkaviBB s.sh
$ ls *ka@(v|bh)i*
AAkabhiBB AAkaviBB
稍长的 cmd 行可以使用 find、grep 和 xargs。它的优点是可以轻松扩展到不同的搜索词(通过扩展 grep 语句或使用 find 的其他选项),更具可读性(imho)和能够对找到的文件执行特定命令的灵活性
find . | grep -e "kabhi" -e "kavi" | xargs ls -l
你可以通过在bash中使用curly braces得到你想要的:
ls -l *ka{v,bh}i*
注意:这不是正则表达式问题,而是 "shell globbing" 问题。 Shell "glob patterns" 与正则表达式不同,尽管它们在许多方面相似。