2015-03-31 191 views
0

grep命令语法的grep命令Linux的排序是:源字符串和目标字符串

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

当使用Unix Pipes时,大多数系统命令会将前一个命令的输出(位于管道左侧),然后将输出传递到管道右侧的命令。

使用带或不带管道的grep时,顺序非常重要。

因此

grep doberman /file/about/dogs 

相同

cat /file/about/dogs | grep doberman 

参见管道上http://linuxcommand.org/lts0060.php一些更多的信息。

0

从Kyle关于管道的回答可以看出,大多数shell命令从stdin读取输入并将其输出写入stdout。现在许多命令还允许您指定一个文件名来读取或写入文件,或允许您将文件重定向到stdin作为输入并将命令stdout重定向到文件。但无论您如何指定要读取的内容,其输入的命令过程为stdin,并提供stdout上的输出(stderr上的错误)。 stdin,stdoutstderr分别是文件描述符0, 1 & 2的名称。

这个基本功能是什么允许命令为piped在一起。如果pipe(由|字符表示)除了从第一个命令(左侧)开始执行stdout,并且将其指向下一个命令stdin。因此,是的,这个命令很重要。

另一点需要记住的是每个管道进程都在其自己的子shell中运行。换句话说,每个|都会产生另一个shell来运行下面的命令。如果你依赖于下一个进程的环境,这会产生影响。

希望这些答案能让你更好地感受正在发生的事情。