2017-09-13 24 views
0

我試圖進行搜索的三個條件採用AND與grep3狀態和grep的

我能夠搜索b,ghkj這樣的:

grep -e "b,.*ghkj" 

,但我無法搜索b,ghkjuuuuuu這樣的:

grep -e "b,.*ghkj.*uuuuuu" 

如何創建一個3條件和搜索grep

+0

很難理解你在寫什麼。添加一些輸入樣本併發布期望的結果 – RomanPerekhrest

+0

我明白什麼是問題所在,我必須等待當前建議的編輯先清除隊列 –

+0

我需要在具有三個條件的文件linux中,而不是或 –

回答

2

有一個在grep的無AND運算(或AFAIK任何正則表達式語言)

grep -E -e 'aaa.*bbb' 

匹配,其包括「AAA」,隨後通過任何數目的字符(.*),然後「BBB」的任何線,這模擬AND是因爲它按順序匹配包含'aaa'和'bbb'的行,但它不會匹配'bbbaaa'。要獲得包含'aaa'和'bbb'的所有行,我們可以使用OR(|)來涵蓋所有可能的情況。

grep -E -e 'aaa.*bbb|bbb.*aaa' 

雖然這種策略不能很好地擴展到3個或更多的子句,因爲案例數呈指數增長。

相反,我們可以使用管道來實現AND。

grep -E -e 'aaa' file | grep -E -e 'bbb' | grep -E -e 'ccc' 
  1. 第一grep的發現在file所有行包含 'AAA',並且輸出它們。
  2. 第二個grep取這個輸出並找到所有包含'bbb'的行並輸出它們。
  3. 第三個grep取得這個輸出並找到所有包含'ccc'的行並輸出它們。

的最終輸出將只從線file包含「AAA」和「BBB」以任何順序「CCC」。

+0

,正是我需要做的 shell_exec('grep -E -e'。$ yeasrs。'/ var/test/test2 /'。$ name_file | grep -E -e'。$ id。'| grep -E -e'。$ id_user。'「); 不工作 –

+0

shell不會展開用單引號括起來的變量,嘗試使用''grep -E -e「$ years」「/ var/test/test2/$ name_file「| grep -E -e「$ id」| grep -E -e「$ id_user」'' –

+0

同樣的問題there'is是一個錯誤引號 –