2014-09-30 116 views
0

內的所有線路我已經制定了這樣一個數據文件 - !grep和顯示兩次出現

# stream 0 
.... 
.... 
.... N lines of data 
# stream 1 
.... 
.... 
.... M lines of data 

這裏M = N

我試圖轉儲只屬於在#stream 0數據 -

cat data.txt | grep "# stream 0$" -A N 

但事情是,我既不知道N個也不M.

長度

我需要一些命令,用於顯示匹配後的所有數據(# stream 0),直到它碰到下一個字符串# stream

我可以用grep來做嗎?我怎麼做 ?

回答

0

用awk,它有這個功能提供了一個簡單的語法:

awk '/# stream 0/,/# stream 1/' data.txt 

並請注意我避免了無用的使用cat :-)的

/startpattern/,/endpattern/語法計算結果爲true,每行在開始和結束模式之間幷包括它們。默認的行爲是打印行,所以你不需要告訴awk明確地這樣做。

0

AWK能做到這一點很容易

awk '/# stream 0/,/# stream 1/' input 

將打印在兩個模式之間的所有線路匹配

# stream 0 
.... 
.... 
.... N lines of data 
# stream 1 

如果你想使用grep,那麼你就可以刪除換行符和grep的結果

cat input | tr -d '\n' | grep -o '# stream 0.*# stream 1' 

provi DED,它會產生使用grep所有的換行符一個clutterd輸出取出

+0

貓的無用用途。 – Jens 2014-09-30 19:07:00

0

如果你真的堅持,你可以這樣做:

grep -A 999999 "stream 0" file | grep -B 999999 "stream 1" 

你可以用sed做到這一點:

sed -ne '/stream 0/,/stream 1/p' file