我正在读《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
最佳答案
第一个并没有真正意义,对我不起作用,而且我也找不到任何关于 ??
的文档。
无论如何,这两个正则表达式都存在两个问题:
这里的
.
匹配任何字符。为了仅匹配单个点,您必须在其前面放置一个\
,例如\.
。整个表达式可以匹配行中的任何位置。您必须断言匹配从头开始。所以从
^
开始。
尝试:ls -a | grep '^\.[^.]'
这意味着:从行的开头开始,找到一个点。然后是方括号之间未列出的任何字符(此处由第二个 ^
完成否定),因此不是文字点。
在括号中,您不必使用 \
,尽管可以。
关于正则表达式获取除当前词典和父词典之外的点文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32196775/