使用locate进行管道传输时,Grep -v不起作用

使用locate进行管道传输时,Grep -v不起作用

我有以下命令:

locate -br '^test.sh$'

输出为:

/home/cas/scripts/test.sh

我想要没有文件名的路径。所以我做了以下操作从输出中删除 test.sh:

locate -br '^test.sh$' | grep -v test.sh

我期望输出是:

/home/cas/scripts/

但相反,我没有得到任何输出。当我按下回车键时,我没有得到任何输出,它只是等待下一个命令。见下图

在此处输入图片描述

什么都没有输出。我甚至尝试反转 grep 一些不同的东西,'cas',但它不会给出任何输出。它看起来grep -v就是不起作用。但普通 grep(所以没有反转)确实有效。为什么它不起作用?或者有没有更好的方法可以从任何地方找到文件的路径,但不在输出中包含文件名(目标是获取/home/cas/scripts/)?

答案1

实际上grep -v PATTERN返回所有不包含的行PATTERN,这就是它给你一个空输出的原因。

以下内容可能对你有用:

locate -br '^test.sh$' | xargs dirname

相关内容