最近我收到了这个find
one-liner,但我无法解释以下两者的区别从何而来:
[root@centos share]# find . -exec grep -i "madis" {} /dev/null \;
./names:Madison Randy:300:Product Development
Run Code Online (Sandbox Code Playgroud)
[root@centos share]# find . -exec grep -i "madis" {} \;
Madison Randy:300:Product Development
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,在第一个中有这个字符串派生自的特定文件,到目前为止我真的无法找出为什么会发生这种情况。
spu*_*der 17
您告诉 grep 搜索 2 个位置。如果搜索多个位置,grep 仅显示完整位置。
例如
touch /tmp/herp /tmp/derp
cd /tmp
echo "foo" > herp
echo "foo" > derp
Run Code Online (Sandbox Code Playgroud)
请注意,如果我只搜索 1 个文件,grep 会忽略文件名
grep -i "foo" /tmp/herp
foo
Run Code Online (Sandbox Code Playgroud)
但是如果我指定多个搜索位置,grep 会说它在哪里找到每个匹配项
grep -i "foo" herp derp
/tmp/derp:foo
/tmp/herp:foo
Run Code Online (Sandbox Code Playgroud)
/dev/null
通过提供 2 个参数,添加它是否会欺骗 grep 打印出完整路径。
man grep
:
-H, --with-filename
打印每个匹配项的文件名。这是要搜索多个文件时的默认设置。
在两种情况下使用一两个文件参数调用 grep 会导致差异。/dev/null
您可以grep
使用参数调用而不是添加-H
。也许这种/dev/null
行为得到了更广泛的支持。