我有一个名为.dir
. 当我输入ls -al | grep .dir
时,它会找到它并向我显示结果,但是当我输入ls -al | grep *dir
或 ( *i*
, *d*
) 时,它什么也不显示。我不明白为什么它找不到任何匹配项。
问问题
2180 次
2 回答
4
当你这样做时,grep *dir
可能会发生两件事:
如果有任何
dir
以例如 (foodir
和bardir
) 结尾的非隐藏文件,则该命令将扩展为grep foodir bardir
,并且不会执行您期望的操作。此外,行为会有所不同,具体取决于只有一个文件或多个文件......没有以 结尾的非隐藏文件
dir
, then*dir
不展开,而是用作 grep 调用中的正则表达式。但是 grep 中的星号用于多次重复最后一次匹配,并且由于没有前一个字符,它代表它自己。结论: grep 从字面上看是在寻找“*dir”。
对于第一个问题,只需使用引号。第二次使用.*dir
(.
代表任何字符):
ls -la | grep ".*dir"
或者,如果您只想查看您的目录:
ls -la | grep "\.dir"
请注意,如果您不.
使用 a转义它,\
它还会显示文件,例如adir
, _dir
...
于 2013-05-27T12:49:00.283 回答
0
未加引号的星号在传递给
grep
. 这意味着如果您的目录除目录外为空.dir
,则传递给的字符串grep
取决于dotglob
和nullglob
设置的状态(在 Bash 中;我不知道它们的 Korn shell 等效项):$ cd -- "$(mktemp -d)" $ mkdir .dir $ shopt -u dotglob nullglob $ echo *dir *dir $ shopt -s nullglob $ echo *dir $ shopt -s dotglob $ echo *dir .dir
于 2013-05-27T12:57:18.257 回答