我可以使用 ripgrep 来做这样的事情:
ps aux | rg 'process name'
我可以搜索上一个命令的输出。由于某种原因,这对我使用常规grep
.如果我做:
ps aux | grep 'process name'
它忽略我试图通过管道输入 grep 的内容,并在当前工作目录中搜索我输入的进程。
例如,如果我 grep firefox 它不会显示它。
编辑:这似乎是因为这里描述了某种别名https://unix.stackexchange.com/a/500727/375504
这有效:ps aux | \grep firefox
答案1
你说当你使用ps aux | grep 'process name'
它 ( grep
) 忽略我试图通过管道输入 grep 的内容并搜索当前工作目录。
你还写道grep 的别名是grep -nRi
。
grep
当您查看( man grep
)的文档时,您会发现该-R
标志的作用与您所描述的完全一样:
-r
,--recursive
递归地读取每个目录下的所有文件,仅当符号链接位于命令行时才遵循它们。 [...]
和
-R
,--dereference-recursive
递归读取每个目录下的所有文件。遵循所有符号链接,与-r
对于 GNU grep,grep -r
如果未给出文件名参数,默认情况下也会从当前目录开始。 grep 的某些其他版本不会这样做,但可能会在仍在读取 stdin 的同时警告“stdin 的递归搜索”。
解决方案是不要使用grep
其他名称的别名。如果您需要特定功能,请创建一个新别名(rgrep
例如,可以是此处的替代方案)。
答案2
我的问题是我在 bash 别名中添加了grep
别名。grep -nRi $*
删除别名或调用\grep
可以解决该问题。