grep .* 从 .bash_history 返回结果并抱怨

grep .* 从 .bash_history 返回结果并抱怨

我是 Linux 新手,到目前为止我一直在使用一些实用程序,特别是 grep 实用程序。我决定创建一个包含以下内容的新文件(恰当地称为“newfile”):

Lady of the night,
I hold you close to me,
And everything is out of sight,
I think I'll be alright.

当我尝试通过输入“grep .* newfile”通过 grep 运行它时,我期望只显示文件的行;然而,它打印了几个结果,首先是:

grep: ..: Is a directory

接下来是整个 .bash_history(为了使这篇文章简短起见,我将省略它),然后是 newfile 的内容。为什么会这样呢?有什么办法可以解决这个问题吗?我必须改变我的正则表达式吗?

答案1

做一个实验!跑步

echo grep .* newfile

从结果中你能得出什么结论?当您引用(放在单引号或双引号中)grep 的第一个参数时,结果如何变化?

如果你想直接了解这一点,请阅读路径名扩展的 POSIX 规范。了解有关各种扩展的一切将使您立即成为 shell 大师:-)

答案2

shell 正在解释您的*,而不是将其grep作为正则表达式传递。要使用正则表达式搜索grep,您必须向它传递一个选项,告诉它“这是一个正则表达式” - 在我的安装中,它是-e.尝试grep -e '.*' newfile

答案3

通过在星号 (.*) 和文件名 (newfile) 之前指定点,您可以告诉 grep 在文件 newfile 中查找模式.\*,并且 shell 会扩展.\*以包含目录中的点文件。

你可能想要这样的东西:

cat newfile

这将打印文件的行。

相关内容