我不明白为什么这个 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
Run Code Online (Sandbox Code Playgroud)
将?
在您的命令是一个shell水珠。shell 扩展该 glob 以将三个参数传递给grep
命令,即它正在打印的三个文件中每个文件的名称。该grep
命令检测到您正在搜索多个文件,因此它会将您正在搜索的表达式所在的文件名添加到表达式的实际打印输出中。由于您的模式是一个单点 ( .
),grep
因此将此模式解释为“任何单个字符”,这三个文件的每一行都将满足。这三个文件中的每一个都只有一行长,因此它为每个文件打印一行。在文件名之前,您将获得上面看到的输出。