2014-01-08 49 views
0

我有一個文本文件,我想提取「String1」之後,並在「String2」之前使用unix shell命令,如grep,awk,sed。 部分的文本文件,如下所示(我需要經過「特殊」來獲取和第二虛線前):shell命令提取後,字符串1和字符串2之前

------------------ 
    Specific: 
    line1 
    line2 
    ------------------ 
    line3 
+0

這是偉大的,只是一個簡單的問題:我如何可以提取之後和之前。呈現的代碼需要以模式開始的行 – Ramin

+1

爲了更清楚地說明,您的預期輸出是什麼? – fedorqui

+0

line1和line2只有 – Ramin

回答

4

基於Extract lines between two patterns from a file

$ awk '/------------------/ {p=0}; p; /Specific/ {p=1}' file 
line1 
line2 

引用我自己的解釋:

  • 當它找到pattern1時,則使變量p = 1。
  • 它只是在p==1時打印行。這是通過p條件來完成的。如果是,則執行默認awk操作,即 print $0。否則,它不會。
  • 當它找到pattern2時,則使變量p = 0。由於在p條件之後檢查此條件,它將打印第一次出現 pattern2的行。

所以不同的是,------------------線在打印前檢查,以致於該標誌可以被停止。打印後檢查Specific行,以便打開標誌而不打印此特定行。

它也設置p=1後使用next可以這樣做awk跳轉到下一行:

awk '/------------------/ {p=0} /Specific/ {p=1; next} p' file 
+1

+1不錯的答案和很好的解釋。 – anubhava

+1

@fedorqui非常感謝。輝煌的解釋 - 偉大的幫助 – Ramin

+1

@Ramin高興它對你有用:)另外,如果你的問題解決了,你可以接受答案。 – fedorqui

相關問題