regex-查找不带';不匹配
我有一个目录列表,其中大多数目录的格式类似于regex-查找不带';不匹配,regex,bash,find,Regex,Bash,Find,我有一个目录列表,其中大多数目录的格式类似于/[foobar]/。但是,有些格式类似于/[foo]bar/ 我想使用find(或我的shell提供的一些其他实用程序)查找与第一个模式不匹配的目录(即文本位于方括号之外)。直到现在,我还无法找到一种方法来“反转”我的模式 有什么方法可以做到这一点吗?find支持通过进行否定和-不。后者不符合POSIX。为了使用必须在其前面加反斜杠或将其放在单引号内。find支持通过进行否定和-不。后者不符合POSIX。为了使用必须在其前面加反斜杠或将其放在单引号内
/[foobar]/
。但是,有些格式类似于/[foo]bar/
我想使用find
(或我的shell提供的一些其他实用程序)查找与第一个模式不匹配的目录(即文本位于方括号之外)。直到现在,我还无法找到一种方法来“反转”我的模式
有什么方法可以做到这一点吗?
find
支持通过进行否定代码>和-不。后者不符合POSIX。为了使用
必须在其前面加反斜杠或将其放在单引号内。find
支持通过进行否定代码>和-不。后者不符合POSIX。为了使用代码>必须在其前面加反斜杠或将其放在单引号内。在这个特定示例中,简单的规则glob将起作用:
$ ls
[a]b [ab]
$ echo \[*\]
[ab]
对于更复杂的模式,可以启用extglob
:
!(pattern-list)
Matches anything except one of the given patterns
()
或使用查找:
find dir ! -name ...
在此特定示例中,一个简单的常规glob将起作用:
$ ls
[a]b [ab]
$ echo \[*\]
[ab]
对于更复杂的模式,可以启用extglob
:
!(pattern-list)
Matches anything except one of the given patterns
()
或使用查找:
find dir ! -name ...
您可以将find与grep和它的-v选项相结合<代码>查找-键入d | grep-v“[foobar]”
您可以将find与grep及其-v选项结合使用<代码>查找-键入d | grep-v“[foobar]”
除非你坚持打开支架检查
除非您坚持打开括号检查…以澄清-您正在寻找一个正则表达式,该正则表达式匹配的字符串的文本介于/
字符之间,而不是介于[]
字符之间?这是否意味着任何与/[.*]/
不匹配的字符串,当然是/
和[]
字符的适当转义?至于“匹配不匹配的东西”。。。请参阅以澄清-您正在查找与字符串匹配的正则表达式,该字符串的文本介于/
字符之间,而不是介于[]
字符之间?这是否意味着任何与/[.*]/
不匹配的字符串,当然是/
和[]
字符的适当转义?至于“匹配不匹配的东西”。。。请参阅最简单的解决方案。这是不正确的。您需要切换到grep-Fv
以切换到文字匹配,或转义正则表达式special\[
因为当前正则表达式将匹配任何包含f
或o
或b
或a
或r
的字符串。这并不理想,因为它不会停止find
查找不匹配的文件。这是处理数千+f时的一个重大挫折要排除的文件和目录。可能是最简单的解决方案。这是不正确的。您需要切换到grep-Fv
以切换到文字匹配,或转义正则表达式special\[
因为当前正则表达式将匹配任何包含f
或o
或b
或a
或r
的字符串。这并不理想,因为它不会停止find
查找不匹配的文件。这是处理数千+f时的一个重大挫折你想排除的文件和目录。一般来说是有效的,但是管道find
到grep
似乎更容易。只要你不打算使用它而只是简单地查找,那就好了,尽管我认为glob更容易(如果文件名中有空格,那么会更安全)。通常可以工作,但将find
管道连接到grep
似乎更容易。只要您不打算使用它,而只是简单地查看,那就可以了,尽管我认为glob更容易(如果文件名中有空格,那么会更安全)。