正则表达式获取点文件,除了当前和父字典
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:我不能接受这个答案。我什至需要有人来描述上面的表达方式。以上是关于正则表达式获取点文件,除了当前和父字典的主要内容,如果未能解决你的问题,请参考以下文章