Grep命令语法如下:
grep "literal_string" filename --> search from string in filename.
所以我假设顺序是这样的
-- keyword(grep) --> string to be searched --> filename/source string and command is interpreted from left to right.
我的问题是如何处理这样的命令:
ps -ef | grep rman
订单是可选的吗?
grep如何知道源是在左边而不在右边?或者我在这里遗漏了一些东西。
答案 0 :(得分:0)
使用Unix管道时,大多数系统命令将从前一个命令(管道左侧)输出,然后将输出传递到管道右侧的命令。
使用带或不带管道的grep时,顺序很重要。
因此
grep doberman /file/about/dogs
与
相同cat /file/about/dogs | grep doberman
有关更多信息,请参阅http://linuxcommand.org/lts0060.php上的管道。
答案 1 :(得分:0)
从Kyle关于管道的回答中可以看出,大多数shell命令从stdin
读取输入并将其输出写入stdout
。现在,许多命令还允许您指定要读取或写入的文件名,或者允许您将文件重定向到stdin
作为输入,并将命令stdout
重定向到文件。但无论您如何指定要读取的内容,命令都会从其stdin
输入并在stdout
上提供输出(stderr
上的错误)。 stdin
,stdout
和stderr
分别是文件描述符0, 1 & 2
的名称。
这个基本功能允许命令一起piped
。其中pipe
(由|
字符表示)不执行任何操作,从第一个命令(左侧)获取stdout
并将其指向下一个命令stdin
。因此,是的,订单很重要。
要记住的另一点是每个管道进程都在自己的子shell中运行。换句话说,每个|
将生成另一个shell以运行以下命令。如果您依赖于下一个进程的环境,这会产生影响。
希望这些答案能让您更好地了解正在发生的事情。