我正在浏览由git管理的大量代码,每当我执行grep时,我都会看到一堆堆形式的消息:
> grep pattern * -R -n
whatever/.git/svn: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有什么方法可以让这些线条消失吗?
Dog*_*ert 275
您可以使用-s
或--no-messages
标志来抑制错误.
-s, - no-messages抑制错误消息
grep pattern * -s -R -n
Run Code Online (Sandbox Code Playgroud)
Ste*_*ice 57
如果您正在浏览git存储库,我建议您使用git grep
.您不需要传入-R
或路径.
git grep pattern
Run Code Online (Sandbox Code Playgroud)
这将显示当前目录中的所有匹配项.
lun*_*chs 10
像这样的错误通常会发送到"标准错误"流,您可以将其传递给文件,或者只是在大多数命令上消失:
grep pattern * -R -n 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
我通常不让 grep 自己进行递归。通常有一些目录你想跳过(.git、.svn...)
你可以用这样的姿势来巧妙地别名:
find . \( -name .svn -o -name .git \) -prune -o -type f -exec grep -Hn pattern {} \;
Run Code Online (Sandbox Code Playgroud)
乍一看似乎有点大材小用,但是当您需要过滤掉某些模式时,它非常方便。
您是否尝试过xargs-0
中的选项?像这样的东西:
ls -r1 | xargs -0 grep 'some text'
Run Code Online (Sandbox Code Playgroud)
小智 5
我看到这种情况发生了好几次,链接断开(指向不存在的文件的符号链接),grep尝试搜索不存在的目标文件(因此,正确而准确的错误消息)。
我通常不会在控制台上执行sysadmin任务,而是从脚本中查找带有“ find”的文本文件,然后对每个文件进行grep:
find /etc -type f -exec grep -nHi -e "widehat" {} \;
Run Code Online (Sandbox Code Playgroud)
代替:
grep -nRHi -e "widehat" /etc
Run Code Online (Sandbox Code Playgroud)