使用 grep 显示文件

使用 grep 显示文件

我希望grep * filename打印 的每一行,filename因为我认为*会匹配该文件的每一行。

$ cat filename
first line
second line
*
$ grep * filename    #Why won't this print anything?
$ 

为什么没有呢?

答案1

首要问题:

如果您*直接放入 shell 而不引用它,则在执行命令之前,shell 会将其扩展到当前目录中的文件列表。

第二期:

grep默认情况下使用正则表达式来匹配模式。在正则表达式中*,表示“匹配模式零次或多次”,而句点 ( .) 表示“匹配任何字符”。

所以你想要的是这样的:grep ".*" filename。或者只使用猫

答案2

grep ^ filename

将打印每一行,因为每一行都有一个开头,这就是 ^ 匹配的内容。 (根据正则表达式的实现,它很可能比匹配 .* 更有效)

grep . filename

删除完全空的行(没有任何内容的行,包括空格和制表符)。

如果您有多个文件,则此命令更有用,因为 grep 默认情况下会打印文件名。例如在我的系统上

grep ^ /proc/sys/kernel/shm*

产生

/proc/sys/kernel/shmall:18446744073692774399
/proc/sys/kernel/shmmax:18446744073692774399
/proc/sys/kernel/shmmni:4096
/proc/sys/kernel/shm_next_id:-1
/proc/sys/kernel/shm_rmid_forced:0

所以我可以用一个命令查看 5 个值。

相关内容