2016-07-28 43 views
1

我想僅打印以「select」開頭並以「;」結尾的段落,但應包含「IN cccc」,例如如果我有以下代碼使用awk或sed打印包含多於2個模式的段落

select aaaa 
bbbb 
IN cccc 
; 
select dddd 
eeeee 
IN ffff 
; 
select rrrr 
eeeee 
IN cccc 
; 

結果會是什麼樣

select aaaa 
bbbb 
IN cccc 
; 
select rrrr 
eeeee 
IN cccc 
; 

所以這裏是我以前awk '/^select*/,/^;/{if ($0 ~ /^IN cccc/) ; print}' inputfile awk的,但我得到的結果是我的文件的全部內容

+0

我用下面的awk,但@fedorqui似乎我錯過了某些「awk」/^select * /,/ ^;/{if($ 0〜/^IN cccc /);打印}'輸入文件 – malmo

+0

您的問題是錯誤的分號放置。你的意思是'if($ 0〜/^IN cccc /){print};'當然,解決這個問題還不足以實現你想要做的事情。 –

回答

4

你可以試試這個awk

awk 'BEGIN{ORS=RS=";"} /^[[:space:]]*select.*IN cccc/' file 

這裏,

  • ORS - 輸出記錄分隔
  • RS - 輸入記錄分隔符
+3

注意:'\ s'特定於GNU awk。如果您使用nawk或mawk,請使用'[[:space:]]'。 –

+0

@glennjackman,謝謝。更新了答案。 – sat

+0

這將錯誤地打印包含'選擇RUIN cccc'的記錄。 idk如果可能發生,或者如果它確實如果它可以 - 如果它是一個問題添加單詞邊界(GNU awk)或空格或換行符或圍繞您關心的字詞.... –