2016-08-18 74 views
0

我想在兩個標籤之間的文件中獲取文本。但是,如果腳本找到了開始標記並且沒有找到結束標記,那麼它會從打開標記打印文件到文件結尾。Bash。如何獲取標籤之間的多行文本

例如文本是:

aaa 
TAG1 
some right text 
TAG2 
some text2 
TAG1 
some text3 
some text4 

和腳本這樣的:

awk "/TAG1/,/TAG2/" 

sed -n "/TAG1/,/TAG2/p" 

比輸出將是:

some right text 
some text3 
some text4 

但我需要這樣的:

some right text 
+0

意味着你不想在標籤中的文字不關閉。 –

+0

@ShekharKhairnar是 –

回答

3

切勿使用範圍表達式,因爲他們使tirivial任務稍有簡短但隨後需要一個完全重寫,以避免重複的條件下,當事情變得稍微更有趣,因爲你的情況。總是使用一個標誌,而不是:

$ awk 'f{ if (/TAG2/){printf "%s", buf; f=0; buf=""} else buf = buf $0 ORS}; /TAG1/{f=1}' file 
some right text 
+1

我在[我如何選擇兩種模式之間的線?](http://stackoverflow.com/a/38972737/1983854)的解決方案集中添加了這種優秀方法。我希望你不介意! – fedorqui

+1

不,完全沒有。 –

相關問題