Regex Bash正则表达式

Regex Bash正则表达式,regex,bash,Regex,Bash,如何删除当前目录中的所有文件-但不删除标题中包含1.65的文件 我试图用计算机捕获这些文件 *[^1][^\.][^6][^5]* *[^\(1\.65\)]* (可以按Alt-*展开regexp) 但它不起作用。下面是一个实验代码: touch foo1.65bar \#bla1.66 qbit0.65t 1.65boris notRelated@All 在此类工作中使用find通常更可靠、更具表现力: find -mindepth 1 -maxdepth 1 '(' -type f -

如何删除当前目录中的所有文件-但不删除标题中包含
1.65
的文件

我试图用计算机捕获这些文件

*[^1][^\.][^6][^5]*
*[^\(1\.65\)]*
(可以按
Alt-*
展开regexp)

但它不起作用。下面是一个实验代码:

touch foo1.65bar \#bla1.66 qbit0.65t 1.65boris notRelated@All 

在此类工作中使用find通常更可靠、更具表现力:

find -mindepth 1 -maxdepth 1 '(' -type f -and -not -name '*1\.65*' ')' -delete

在此类工作中使用find通常更可靠、更具表现力:

find -mindepth 1 -maxdepth 1 '(' -type f -and -not -name '*1\.65*' ')' -delete
您可以使用..(bash 4)

输出

a  b  c  foo1_65bar  foo1.65bar
=====
foo1.65bar
您可以使用..(bash 4)

输出

a  b  c  foo1_65bar  foo1.65bar
=====
foo1.65bar

您可以在文件名上使用下面这样的正则表达式,使用Ruby、Python、Perl等。然后,您必须用所选语言编写一个小脚本或一行代码来完成这项工作。它使用负前瞻。Cfr


如果要生成与特定字符串不匹配的正则表达式,则不能使用
[]
,因为它指定单个字符,而不是按顺序指定所有字符。您必须使用lookaround结构。

您可以在文件名上使用下面的正则表达式,使用Ruby、Python、Perl等。然后您必须用所选语言编写一个小脚本或一行代码来完成这项工作。它使用负前瞻。Cfr


如果要生成与特定字符串不匹配的正则表达式,则不能使用
[]
,因为它指定单个字符,而不是按顺序指定所有字符。你必须使用lookaround结构。

@unbeli:这很公平。只要
-delete
在线,我就会把它们放进去,以确保
find
使用了我对运算符优先顺序的想法。@unbeli:这很公平。我只是倾向于在
-delete
在线时放置它们,以确保
find
使用我对运算符优先顺序的想法。谢谢,我从未听说过这一点。从一个角度来看,支持正则表达式很酷。从另一个角度来看,学习一个正则表达式的概念是不好的,为什么它们不遵循@Adobe。我认为这是因为
bash
必须将这个扩展的全局绑定适应现有的框架,如果按照PCRE..@Adobe实现regex,这个框架就会崩溃。这是因为PCRE与普通的shell全局绑定太不同了,如果shell匹配突然表现出与正常完全不同的行为,那将非常混乱。例如,如果您键入
foo.txt
作为参数,并且PCRE匹配生效,则它会将句点匹配到任何单个字符(相当于正常全局搜索中的
foo?txt
)<另一方面,code>*.txt是一个无效的RE,因为
*
表示“0或更多的最后一件事”,并且在模式的开头没有“最后一件事”。谢谢,我从来没有听说过。从一个角度来看,支持正则表达式很酷。从另一个角度来看,学习一个正则表达式的概念是不好的,为什么它们不遵循@Adobe。我认为这是因为
bash
必须将这个扩展的全局绑定适应现有的框架,如果按照PCRE..@Adobe实现regex,这个框架就会崩溃。这是因为PCRE与普通的shell全局绑定太不同了,如果shell匹配突然表现出与正常完全不同的行为,那将非常混乱。例如,如果您键入
foo.txt
作为参数,并且PCRE匹配生效,则它会将句点匹配到任何单个字符(相当于正常全局搜索中的
foo?txt
)<另一方面,code>*.txt是无效的RE,因为
*
表示“0或更多的最后一件事”,并且在模式的开头没有“最后一件事”。另外,正则表达式不是这样工作的。如果有方法使其匹配,正则表达式将找到它,并报告匹配。因此,对于您的正则表达式示例,正则表达式引擎将发现foo1.65bar匹配,因为
f
匹配
[^1]
,第一个
o
匹配
[^.]
(这里不需要反斜杠,顺便说一句),第二个
o
匹配
[^6]
,而
1
匹配
[^5]
。这也是为什么有不同的正则表达式引擎以及为什么globbing不使用正则表达式的一种解释;每种工具都适合特定的用途。顺便说一句,正则表达式不是这样工作的。如果有方法使其匹配,正则表达式将找到它,并报告匹配。因此,对于您的正则表达式示例,正则表达式引擎将发现foo1.65bar匹配,因为
f
匹配
[^1]
,第一个
o
匹配
[^.]
(这里不需要反斜杠,顺便说一句),第二个
o
匹配
[^6]
,而
1
匹配
[^5]
。这也是为什么有不同的正则表达式引擎以及为什么globbing不使用正则表达式的一种解释;每一种工具都适合特定的用途。嗯,这对我来说太难了。不过还是要谢谢你提供的信息。嗯,这对我来说太难了。不过还是要谢谢你提供的信息。