我有一个目录列表,其中大多数格式为./[foobar]/
。但是,有些格式为./[foo] bar/
。正则表达式 - 找到不匹配的文件
我想用find
(或其他一些公用事业我的壳报价)找到这些目录不匹配(即具有方括号外面的文字)的第一图案。到目前为止,我无法找到一种方法来“反转”我的模式。
任何方式来做到这一点?
我有一个目录列表,其中大多数格式为./[foobar]/
。但是,有些格式为./[foo] bar/
。正则表达式 - 找到不匹配的文件
我想用find
(或其他一些公用事业我的壳报价)找到这些目录不匹配(即具有方括号外面的文字)的第一图案。到目前为止,我无法找到一种方法来“反转”我的模式。
任何方式来做到这一点?
您可以将find与grep和-v选项结合使用。 find . -type d | grep -v "[foobar]"
可能是最简单的解决方案。 – 2013-03-07 11:35:48
这是不正确的。你需要切换到'grep -Fv'来切换到文字匹配,或者转义正则表达式特殊的'\ ['因为当前正则表达式将匹配任何包含'f'或'o'或'b'或' a''或'r'任何地方。 – tripleee 2018-02-21 04:59:14
find
通过!
和-not
支持否定。后者不符合POSIX标准。为了使用!
,你必须在它之前加上反斜杠或将它放在单引号内。
一个简单的正水珠会在这个特殊的例子工作:
$ ls
[a]b [ab]
$ echo \[*\]
[ab]
对于更为复杂的模式可以启用extglob
:
!(pattern-list)
Matches anything except one of the given patterns
或者使用find:
find dir ! -name ...
工程一般,但管道'发现'''grep'似乎更容易。 – 2013-03-07 11:37:04
只要你不打算使用它,只要看看,这将是很好的,但我认为glob更容易(并且如果文件名中有空格,则更安全)。 – Kevin 2013-03-07 14:45:08
find -type d -name '*\]?*'
除非你坚持开括号检验...
为了澄清 - 你正在寻找有''//字符之间的文本字符串相匹配的正则表达式是不是之间'[] '人物?这是否意味着任何不匹配'/[.*]/'的字符串 - 适当地转义'/'和'[]'字符,当然......?至于“匹配的东西是不是”...看到http://stackoverflow.com/questions/406230/regular-expression-to-match-string-not-containing-a-word – Floris 2013-03-06 17:14:39