2015-03-31 187 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來運行下面的命令。如果你依賴於下一個進程的環境,這會產生影響。

希望這些答案能讓你更好地感受正在發生的事情。