问题描述
我必须在程序中使用 find , grep 和 rsync 命令.通常,我很少在单个脚本中使用所有这些内容,因此之前没有注意到.是否有符合以下命令的 regular-expression 类别:
I have to use find, grep and rsync commands for my program. Generally, I rarely used all of these in a single script so didn't notice earlier. Is there a category of regular-expression that fit these commands like:
find command: follows regex type1
grep command: follows regex type2
rsync command: follows regex type3
例如,要查找所有导致我的程序日志文件的路径,我们可以这样做:
For example, for finding all the paths which lead to my program log file, we can do:
find -type f -name "foo.log*"
在上面的命令中, star 的行为不像正则表达式,就像在正则表达式中一样, star 对应于零/一/多个实例在这种情况下,紧接在前的表达式是 character('g')的原因是什么?因此,如果它实际上遵循正则表达式,则可以匹配以下文件名:
Here, in the above command, the star is not acting like a proper regular expression, as in regex, the star corresponds to the zero/one/multiple instances of the immediate before expression which is character('g') in this case? So if it actually follows regex, it can match filenames like:
foo.lo
foo.log
foo.logg
foo.loggg
and so on...
类似于 find 命令,当给定其源路径和目标路径的表达式时, rsync 会起作用.另一方面,我注意到 grep 命令确实遵循了正则表达式.
Similar to find command, the rsync behave when given expression for its source and destination path. While on the other hand, I noticed the grep command do follow the regular expression.
所以,总共:
- 所有这些命令是否遵循不同类型的正则表达式?
- 或者其中有些遵循正则表达式,而有些则没有,如果不是,那么遵循什么模式?基本上,我正在寻找所有这些工具的模式的概括?
我是Linux工具的新手.请指导!
I'm new to Linux tools. Please guide!
推荐答案
通配符和正则表达式之间有很大的区别.
There is a big difference between wildcards and regular expressions.
通配符:
- 定义简单搜索模式的特殊字符
- 由shell(bash,旧的MS-DOS等)和许多unix命令(find等)使用
- 一组有限的通配符,通常只是:
-
*
-零个或多个字符(任意组合) -
?
-恰好是一个字符(任何字符) -
[
...]
-完全不属于一组字符或一个字符范围内的一个字符,例如[0-9a-f]
代表十六进制数字
- special characters that define a simple search pattern
- used by shells (bash, old MS-DOS, ...), and by many unix commands (find, ...)
- limited set of wildcards, typically just:
*
- zero or more chars (any combination)?
- exactly one char (any char)[
...]
- exactly one char out of a set or range of chars, such as[0-9a-f]
for a hex digit
正则表达式:
- 定义搜索模式的字符序列
- 将正则表达式(简称正则表达式)视为类固醇上的通配符
- POSIX Basic(BRE-基本正则表达式)
- POSIX扩展(ERE-扩展正则表达式)
- Perl和PCRE(与Perl兼容的正则表达式)
- JavaScript
- 更多口味,请参见 https://en.wikipedia.org/wiki/Comparison_of_regular-expression_engines
-
grep
默认情况下使用POSIX Basic -
grep -E
或egrep
使用POSIX扩展 -
grep -P
使用Perl
grep
uses POSIX Basic by defaultgrep -E
oregrep
uses POSIX Extendedgrep -P
uses Perl
这篇关于如何理解find/grep/rsync中的表达式/模式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
-