如何解决如何理解 find/grep/rsync 中的表达式/模式?
我必须为我的程序使用 find、grep 和 rsync 命令。一般来说,我很少在一个脚本中使用所有这些,所以之前没有注意到。是否有一类正则表达式适合这些命令,例如:
find command: follows regex type1
grep command: follows regex type2
rsync command: follows regex type3
例如,要查找导致我的程序日志文件的所有路径,我们可以这样做:
find -type f -name "foo.log*"
这里,在上面的命令中,star 的作用不像一个适当的正则表达式,因为在正则表达式中,star 对应于零/一个/多个实例在这种情况下是 character('g') 的前一个表达式?因此,如果它实际上遵循正则表达式,它可以匹配如下文件名:
foo.lo
foo.log
foo.logg
foo.loggg
and so on...
与 find 命令类似,rsync 在为其源和目标路径提供表达式时的行为。另一方面,我注意到 grep 命令确实遵循正则表达式。
所以,总的来说:
- 所有这些命令都遵循不同类型的正则表达式吗?
- 或者他们中的一些遵循正则表达式而他们中的一些不遵循,如果不是,那么他们遵循什么模式?基本上,我正在寻找所有这些工具的模式的概括?
我是 Linux 工具的新手。请指导!
解决方法
通配符和正则表达式之间有很大的区别。
通配符:
- 定义简单搜索模式的特殊字符
- 被 shell(bash、旧的 MS-DOS、...)和许多 unix 命令(find、...)使用
- 有限的通配符集,通常只是:
-
*
- 零个或多个字符(任意组合) -
?
- 正好一个字符(任何字符) -
[
...]
- 一组或一系列字符中的一个字符,例如[0-9a-f]
表示十六进制数字
-
- 参见教程:https://linuxhint.com/bash_wildcard_tutorial/
正则表达式:
- 定义搜索模式的字符序列
- 将正则表达式(简称 regex)视为类固醇上的通配符
- 正则表达式模式用于查找或查找和替换字符串
- 强大的语言,大多数编程语言都原生支持
- 正则表达式有多种风格,通常分为以下几类:
- POSIX Basic(BRE - 基本正则表达式)
- POSIX 扩展(ERE - 扩展正则表达式)
- Perl 和 PCRE(Perl 兼容的正则表达式)
- JavaScript
- 更多口味,见https://en.wikipedia.org/wiki/Comparison_of_regular-expression_engines
- 某些 unix 命令允许您选择一种或多种正则表达式;例如:
-
grep
默认使用 POSIX Basic -
grep -E
或egrep
使用 POSIX 扩展 -
grep -P
使用 Perl
-
- 维基百科文章:https://en.wikipedia.org/wiki/Regular_expression
- 教程:https://twiki.org/cgi-bin/view/Codev/TWikiPresentation2018x10x14Regex
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。