2014-06-17 59 views
0

我敢肯定已經有人問過這個問題,但我不能設法找到它,反正,那就是:標準輸出傳遞到作爲grep的模式參數

假設我們有一個文件:

$cat file 
AAA 123 
BBB 456 
CCC 789 

而且我喜歡做一些事情,如:

printf "BBB\nAAA\n" | grep - file 

其中「 - 」是標準輸出。但grep並不認爲它是標準輸出。

,並得到

BBB 456 
AAA 123 

還應該有許多模式,而不是echo "BBB"工作。而不是回聲我有幾個管道和一個列表作爲輸出。

回答

0

我終於找到了竅門不完全說服我:

grep -f <(printf "BBB\nAAA\n") file 

回報:

AAA 123 
BBB 456 

但爲什麼本作中file順序?

我覺得這不太實際,因爲它可能相當長,而不是printf "BBB\nAAA\n"

+0

你應該把所有的模式在一個文件中,如果它是很長的字符串。 – anubhava

+0

這不是那麼長(約20,是嗎?)。但有沒有辦法將模式管道化爲grep而不是管道「文件」? – jrjc

+1

是的,你可以這樣做:'egrep'AAA | BBB'文件' – anubhava

1

使用GNU grep的你可以這樣做:

printf "BBB\nAAA\n" | grep -f - file 
+0

它不適用於我:'grep: - :沒有這樣的文件或目錄(Mac用戶) – jrjc

+1

我也是一個mac用戶,但已經使用'brew install grep'安裝了'gnu grep'。不幸的是,在mac(BSD'grep')上的默認'grep'不支持'grep -f -'請參閱[Q&A](http://unix.stackexchange.com/questions/76762/how-to-get-freebsd -grep到識別選項) – anubhava