2015-09-17 21 views
1

嗯,我已經有了一個masive文件是這樣的:如何搜索字符串的X行上方/下方的行?

vi file1 

      xxx 
       xxxxxxxxx   xxxxxxxxxx   xxxxxxxxxx 
      O48  
       8.80620265   3.13576702   16.73758145 
      O49  
       2.11414472   0.47922554   23.80825532 
      H1  
       1.09354199   0.56015908   23.18883965 
      H2  
       1.84841487   0.60605486   24.87784867 
      O50  
       6.45693524   0.12577435   26.20766069 
      H3  
       5.43633251   0.20670789   25.58824502 
      H4  
       6.19120539   0.25260367   27.27725405 
      O51  
       3.85207272   4.89778259   29.52091127 
      H5  
       2.83146999   4.97871613   28.90149560 
      H6  
       3.58634288   5.02461191   30.59050463 
      xx 
       xxxxxxxxx   xxxxxxxxx   xxxxxxxxx 

,我想要做的,僅僅是從字符串「H1」(即O49在這種情況下)2行以上搜索,並從打印這條路走到盡頭。

我嘗試了一下grep,但它無法正常工作。 非常感謝提前!

回答

2

隨着GNU的grep:

grep -Poz '(.*\n){2}.*H1.*(\n.*)*' file 

輸出:

 
      O49  
       2.11414472   0.47922554   23.80825532 
      H1  
       1.09354199   0.56015908   23.18883965 
      H2  
       1.84841487   0.60605486   24.87784867 
      O50  
       6.45693524   0.12577435   26.20766069 
      H3  
       5.43633251   0.20670789   25.58824502 
      H4  
       6.19120539   0.25260367   27.27725405 
      O51  
       3.85207272   4.89778259   29.52091127 
      H5  
       2.83146999   4.97871613   28.90149560 
      H6  
       3.58634288   5.02461191   30.59050463 
      xx 
       xxxxxxxxx   xxxxxxxxx   xxxxxxxxx 
+0

完美!!!!!!!!!!!!!!!!!! – git

1

假設該文件是小於1000線:

grep -B2 -A1000 'H1' file 
+0

確定可能超過1000赫赫 – git

+0

怎麼樣' grep -B2'H1'文件| head -n 1' – git

+0

@git將僅打印*'O49'。如果你不知道文件的最大行數,你可以執行'grep -B2 -A $(cat file | wc -l)'H1'file',但是這需要讀取文件兩次。 – user000001

相關問題