Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
regex-查找不带';不匹配_Regex_Bash_Find - Fatal编程技术网

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更容易(如果文件名中有空格,那么会更安全)。