2015-04-03 72 views
4

我需要使用3個連續的空行作爲匹配模式。以下示例在「雨」和「太陽」之間有3條空行。awk連續3個空行作爲匹配模式

的例子:

cat 
flower 


rabbit 
grass 
rain 



sun 

下面的代碼不起作用:

/\n\n\n/ {print "3 consecutive empty lines found"} 

或者

/^$\n^$\n^$\n/ {print "3 consecutive empty lines found"} 

或者

/^$^$^$/ {print "3 consecutive empty lines found"} 

或者

/'^$'\n'^$'\n'^$'\n/ {print "3 consecutive empty lines found"} 

我的bash的版本是3.2

+0

你究竟想要達到什麼目的?這項工作可能會有更好的工具。 – timgeb 2015-04-03 22:04:32

+0

awk通過基於記錄分隔符(這是默認的\ n)分隔行來讀取文件,因此您將無法一次測試多行。你需要做一些連續空行的滾動計數。 (編輯:就像剛剛說的答案..) – zzevannn 2015-04-03 22:15:28

+0

鑑於你正在寫一個awk腳本,你爲什麼要告訴我們bash版本而不是awk版本? awk版本很重要,bash版本對於這個問題很有用,因爲知道你駕駛什麼樣的汽車。無論如何 - 做到這一點的正確方法將取決於您的預期輸出是什麼,所以請發佈它。 – 2015-04-04 13:35:52

回答

3

下面可以幫助:

awk '/^$/{if(++i>2){print "3 consecutive empty lines found";exit}}/./{i=0}' 

隨着/^$/我們計算的連續的空行數。如果我們找到/./的非空行,我們將計數器設置爲零。如果計數器達到3,我們打印我們的信息並退出。

+0

非常感謝!它適用於我後玩一點。我使用這種模式匹配(3個連續的空行)作爲3種或4種不同模式之一來停止搜索。 – LearnAWK 2015-04-04 02:13:21

0

機會是所有你需要的是(使用GNU AWK多焦RS):

BEGIN{RS="^$"} /(^|\n)\n\n\n/ {print "3 consecutive empty lines found"} 

,但沒有向我們展示了預期的輸出,這只是一個猜測。