有人可以向我解释为什么此regexp在grep中不起作用?
ls -la ./ | grep -E '^d.*\<\..*\>$'
在我(错误)的观点中,这必须向我显示名称以“。”开头的目录行,因为:
问题是我不明白这一点:
因此,我认为正则表达式的这一部分将保留包含以点开头和以字符组合结尾的单词的行。
有了这个“ ls -la”,带有grep的regexp不会显示任何结果:
[arch dirtest]$ ls -la
total 52
drwxr-xr-x 6 siv users 4096 10 nov 00.41 .
drwx------ 59 siv users 4096 9 nov 23.15 ..
drwxr-xr-x 2 siv users 4096 10 nov 00.41 .test
drwxr-xr-x 2 siv users 4096 10 nov 00.41 test1
drwxr-xr-x 2 siv users 4096 10 nov 00.41 test2
您的正则表达式无效,因为.
它不是文字字符。grep的只考虑a-z
,A-Z
,0-9
和_
以字为单位的字符。
无论如何,这实际上不是正确的方法。首先,分析ls
是很脆弱的,几乎从来就不是一个好主意。以下是列出名称以a开头的目录的其他方法.
:
find . -type d -name '.*'
或者,如果您不希望它下降到子目录中(并且如果您拥有GNU find
,则为Linux上的默认设置):
find . -maxdepth 1 -type d -name '.*'
另外,您可以只使用echo
一个shell glob:
echo .*
那也将显示文件。为了避免这种情况,请使用类似以下的循环:
for i in .*; do [ -d "$i" ] && printf '%s\n' "$i"; done
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句