有人可以向我解释一下 grep 是如何做到这一点的吗?

有人可以向我解释一下 grep 是如何做到这一点的吗?

我不明白为什么这个 grep 命令以这种方式显示结果。为什么会输出文件名呢?为什么用双点符号分隔?它是正则表达式吗?

[root@centos2 ~]# grep . /sys/block/sda/sda?/start
/sys/block/sda/sda1/start:2048
/sys/block/sda/sda2/start:1026048
/sys/block/sda/sda3/start:5220352

答案1

你的命令中的?是一个 shell glob。 shell 扩展该 glob 以将三个参数传递给grep命令,即它正在打印的三个文件中每个文件的名称。该grep命令检测到您正在搜索多个文件,因此它将在表达式的实际打印输出中找到您正在搜索的表达式的文件名。由于您的模式是单个点 ( .),grep因此将此模式解释为“任何单个字符”,所有三个文件的每一行都满足该模式。这三个文件中的每一个都只有一行长,因此它为每个文件打印一行。在文件名前面添加,您将得到上面看到的输出。

相关内容