shell命令在string1之后和字符串2之前提取

时间:2014-01-08 15:46:00

标签: shell scripting sed awk grep

我有一个文本文件,我想在“String1”之后和“String2”之前使用unix shell命令(例如grep,awk,sed)提取。 文本文件的一部分如下(我需要在“特定”之后和第二个虚线之前):

    ------------------
    Specific:
    line1
    line2
    ------------------
    line3

1 个答案:

答案 0 :(得分: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行,以便打开该标志而不打印此特定行。

设置next后,也可以使用p=1完成,以便awk跳转到下一行:

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