帮助grep中的正则表达式

sivlab

有人可以向我解释为什么此regexp在grep中不起作用?

ls -la ./ | grep -E '^d.*\<\..*\>$'

在我(错误)的观点中,这必须向我显示名称以“。”开头的目录行,因为:

  • ^ d->保留以字符“ 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-zA-Z0-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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章