find/grep/rsync中的expression/pattern如何理解?
How to comprehend expression/pattern in find/grep/rsync?
我必须为我的程序使用 find、grep 和 rsync 命令。通常,我很少在一个脚本中使用所有这些,所以没有早点注意到。是否有适合这些命令的 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 对应到紧接在表达式之前的 zero/one/multiple 个实例,在这种情况下是 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 基本(BRE - 基本正则表达式)
- POSIX 扩展(ERE - 扩展正则表达式)
- Perl 和 PCRE(Perl 兼容正则表达式)
- JavaScript
- 更多口味,参见https://en.wikipedia.org/wiki/Comparison_of_regular-expression_engines
- 一些 unix 命令允许您 select 一种或另一种正则表达式;例如:
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
我必须为我的程序使用 find、grep 和 rsync 命令。通常,我很少在一个脚本中使用所有这些,所以没有早点注意到。是否有适合这些命令的 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 对应到紧接在表达式之前的 zero/one/multiple 个实例,在这种情况下是 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 基本(BRE - 基本正则表达式)
- POSIX 扩展(ERE - 扩展正则表达式)
- Perl 和 PCRE(Perl 兼容正则表达式)
- JavaScript
- 更多口味,参见https://en.wikipedia.org/wiki/Comparison_of_regular-expression_engines
- 一些 unix 命令允许您 select 一种或另一种正则表达式;例如:
grep
默认使用 POSIX Basicgrep -E
或egrep
使用 POSIX 扩展grep -P
使用 Perl
- 维基百科文章:https://en.wikipedia.org/wiki/Regular_expression
- 教程:https://twiki.org/cgi-bin/view/Codev/TWikiPresentation2018x10x14Regex