假设我有两个文件:ac和abc。我想找到一个正则表达式来匹配两个文件。通常,我希望以下正则表达式能够正常工作,但它永远不会起作用:
find ./ -name ab?c
Run Code Online (Sandbox Code Playgroud)
我已经尝试过转义或不转问号,这似乎从来没有奏效。通常在我找到的正则表达式文档中;?表示:前一个字符重复了0或1次,但find似乎不理解这一点。
我已经在两个不同的查找版本上进行了尝试:GNU查找版本4.2.31和查找(GNU findutils)4.6.0
PS:可以使用*,但我特别想只匹配一个可选字符。
find ./ -name a*c
Run Code Online (Sandbox Code Playgroud)
给
./ac
./abc
Run Code Online (Sandbox Code Playgroud)
要仅匹配一个可选字符的表达式,请尝试使用or选项:
touch abc ac abbc
find . -name "a?c" -or -name "ac"
Run Code Online (Sandbox Code Playgroud)
只给你:abc和ac名字。
or一般来说,您可以使用和andoptions =)构建相当复杂的查找查询
传递给-name的表达式不是正则表达式,而是全局表达式。一个(单个)glob表达式不能用于您的用例,但是您可以使用使用以下正则表达式-regex:
find -regex '.*/ab?c'
Run Code Online (Sandbox Code Playgroud)
顺便说一句,默认的正则表达式语言是Emacs样式,如下所述:https : //www.emacswiki.org/emacs/RegularExpression。您可以使用更改正则表达式语言-regextype。
| 归档时间: |
|
| 查看次数: |
1207 次 |
| 最近记录: |