【问题标题】:How to comprehend expression/pattern in find/grep/rsync?如何理解 find/grep/rsync 中的表达式/模式?
【发布时间】:2021-02-18 04:43:18
【问题描述】:

我的程序必须使用 findgreprsync 命令。一般来说,我很少在一个脚本中使用所有这些,所以之前没有注意到。是否有适合这些命令的 regular-expression 类别,例如:

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 命令确实遵循正则表达式。

所以,总共:

  1. 所有这些命令都遵循不同的正则表达式吗?
  2. 或者其中一些遵循正则表达式,而另一些则没有,如果没有,那么它们遵循什么模式?基本上,我正在寻找所有这些工具模式的概括?

我是 Linux 工具的新手。请指导!

【问题讨论】:

  • GNU find(参见:find -regextype help)、GNU grep(取决于使用的选项:正则表达式、扩展正则表达式、Perl 兼容的正则表达式,参见:man grep)和 rsync(glob)跨度>

标签: regex grep find glob rsync


【解决方案1】:

通配符和正则表达式有很大区别。

通配符:

  • 定义简单搜索模式的特殊字符
  • 被 shell(bash、旧的 MS-DOS、...)和许多 unix 命令(find、...)使用
  • 一组有限的通配符,通常只有:
    • * - 零个或多个字符(任意组合)
    • ? - 正好一个字符(任何字符)
    • [...] - 恰好是一组或一系列字符中的一个字符,例如 [0-9a-f] 表示十六进制数字
  • 见教程:https://linuxhint.com/bash_wildcard_tutorial/

正则表达式:

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多