bir*_*rdy 3 shell grep pipe alias
我正在尝试将 grep 搜索的输出通过管道传输到另一个 grep 的输入中。如:
grep search_query * | grep -v but_not_this
Run Code Online (Sandbox Code Playgroud)
但是第二个 grep 没有使用前一个搜索的输出。看起来第二个 grep 只是使用 * 代替。例如,
grep lcov *
tst/bits/Module.mk:21:$(call func_report_lcov)
tst/drivers/Module.mk:27:$(call func_report_lcov)
Run Code Online (Sandbox Code Playgroud)
但是当我想过滤掉包含“call”的结果时,
grep lcov * | grep -v call
...
Run Code Online (Sandbox Code Playgroud)
Grep 给了我工作区中不包含“调用”的每一行。
环境信息:
alias grep='grep -nR --color=always'
还有什么我可能会遗漏的吗?
别名是导致它的原因。From man grep
,该-R
选项导致grep
“递归读取每个目录下的所有文件”。因此,管道后面的部分忽略第一个的输出grep
,而是grep
从当前目录递归遍历所有文件。
您可以绕过别名并使用带有\grep
. 因此,以下应该给你你所期望的。
grep lcov * | \grep -v call
Run Code Online (Sandbox Code Playgroud)
但是,我个人认为-R
输入别名是令人困惑的。