使用正则表达式在 Linux 中查找命令 [5 个示例]
使用正则表达式进行搜索,启用 find 命令的野兽模式。
find 命令是一个强大的命令,可以根据多种条件搜索文件。
您可以在 find 命令中使用正则表达式(regex)进行搜索来启用野兽模式。
但在跳到示例部分之前,了解一些基本的正则表达式标记和语法至关重要。
正则表达式令牌快速简介
标记不过是用于搜索指定模式的特殊字符。
那么让我们看一下我将在 find 命令中使用的一些最基本且广泛使用的标记:
- Period (.)
它可以让您匹配任何字符一次(换行除外)。因此 a.b 将匹配 acb、aeb 和 abb 等字符串,但不会匹配 accb 或 ab
- Backslash (\)
它消除了特殊字符的影响,例如 (.) 将指示句点效果,但当使用 a.b 时,它只会搜索字符串 a.b
- Asterisk (*)
它被称为中继器符号。这意味着前面的字符可以找到 0 次或多次。所以 ca*t 会找到给你 ct、cat、caat 等。
- Square brackets ([])
方括号内字符串中使用的任何字符都会得到肯定的结果。这意味着 a[bc]d 将匹配 abd 或 acd,但不匹配 abcd。
- Caret (^)
一般用于指定搜索的起点,但在方括号[^]内使用时也可用于否定内容。意味着 a[^bc]d 将为您提供 aed、azd,但不会提供 abd 或 acd。
现在,让我们看一下将 find 与正则表达式结合使用的基本语法:
find [path] -regex [regular_expression]
这里,
[path]
是您要搜索文件的位置。regular_expression
是您将使用标记来表达您正在查找的文件模式的地方。
现在是时候让我分享一些如何将 find 与正则表达式结合使用的示例了。
使用正则表达式查找命令的实际示例
我将从最常见的场景开始,其中用户只知道文件的前几个字符并想知道它在哪里。
当前目录下根据首字符搜索文件
目前,我的文件系统如下所示:
我想搜索以 Fo
或 Fr
开头的文件,所以我的命令是:
find ./ -type f -regex '\.\/F[or].*'
这里,-type f
用于搜索文件,.\/
用于在当前目录中查找文件,F[or]
将显示从 Fo 和 Fr 开始的文件名。
但是,如果您想对给定结果执行一些命令/程序怎么办?这可以通过使用 find 命令和 exec 来完成:
搜索子目录中的文件
上面的示例仅适用于当前目录,并没有显示一些遵循相同命名模式的文件。
因此,我将使用相同的命名模式 F[or]
来查找子目录中的文件:
find ./ -type f -regex '\.\/[^/]*\/F[or][^/]*'
看起来太复杂了对吧?让我为你分解一下。
这里的 [^/]*\/
引用不包含任何反斜杠的文件,从而消除了在当前目录中查找文件的可能性。
最后,我用 [^/]
替换了句点 ( . ),以免将搜索范围扩大到第一个子目录,并指出文件名后面不应有斜杠。
通过每个子目录中的正则表达式模式搜索文件
在单个子目录中搜索后看起来相当复杂,对吗?嗯,这将是最简单的一个!
好吧,两个星号就是这样!让我告诉你怎么做:
find ./ -type f -regex '.*F[or].*'
如果你对它是如何工作的感到好奇,那是因为我在开头和结尾都使用了星号,所以它经历了所有可能性。
根据扩展名搜索文件
首先,让我分享一下如何根据扩展名搜索文件的一般语法:
find ./ -type f -regex ".*\[fileextension]"
因此,假设我想找到所有文本文件(具有 .txt 扩展名),并且可以通过给定命令轻松完成:
find -regex -type f ".*\.txt"
根据文件名和扩展名搜索文件
这是我个人最喜欢的正则表达式与 find 的实现,因为您可以根据首字母及其扩展名搜索文件,这非常方便。
首先,我们看一下语法:
find ./ -type f -regex '\.\/[Filename].*\.[extension]'
让我们把它变得实用一点。因此,我遇到的情况是,我只知道文件的前几个字母(以 Fo 或 Fr 开头)及其扩展名 (.sh):
find ./ -type f -regex '\.\/F[or].*\.sh'
最后的话
从查找在 n 分钟内修改的文件到使用 exec 对结果执行脚本,find 是提供超过 50 多个选项的最广泛的命令之一。
本指南解释了使用 find 命令的另一种方法,使您在 Linux 之旅中更进一步。
虽然本指南很简单,但如果您仍然有任何疑问,请在评论中告诉我。