正则表达式获取点文件,除了当前和父字典

Posted

技术标签:

【中文标题】正则表达式获取点文件,除了当前和父字典【英文标题】:Regex getting dot files except the current and parent dictionaries 【发布时间】:2015-08-25 06:17:22 【问题描述】:

我正在阅读“Linux 工作原理”一书。 作者给出了以下正则表达式,这样我就可以得到除了当前目录和父目录之外的所有点文件。 (第 21 页)

.??*
.[^.]*

如果目录中存在任何点文件,则两者都有效。但是当不存在点文件时,只有第一个工作。

我无法理解它们。你能描述一下我吗?

$ ls -a
. .. .hiding something

$ ls -a | grep .??*
.hiding

$ ls -a | grep .[^.]*
.hiding

$ mv .hiding hiding

$ ls -a | grep .??*

$ ls -a | grep .[^.]*
.
..
hiding
something

【问题讨论】:

【参考方案1】:

第一个真的没有意义,对我不起作用,我也找不到任何关于 ?? 的文档。

无论如何,这两个正则表达式都有两个问题:

    这里的. 匹配任何字符。为了只匹配单个点,您必须在其前面放置一个\,例如\.

    整个表达式可以匹配行中的任何位置。您必须断言匹配从头开始。所以从^开始。

试试:ls -a | grep '^\.[^.]' 这意味着:从行首开始,找到一个点。然后在括号之间没有列出的任何字符(否定由第二个^ 完成)括号之间,所以不是文字点。

在括号中你不必使用\,尽管你可以。

【讨论】:

感谢您的回答。有用。我发现 grep .??* 中的字符显然可以用作通配符,因为 grep ".??*" 根本不起作用。 @palacsint:我不能接受这个答案。我什至需要有人来描述上面的表达方式。

以上是关于正则表达式获取点文件,除了当前和父字典的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:获取两个字符之间的字符串

从 python 中成功的正则表达式匹配构建字典

正则表达式.h 性能

给初学者的 Python 建议。正则表达式,字典等?

正则表达式

python 正则表达式参数替换