2013-10-27 53 views
1

我有一个文件。我必须在Linux中使用AWK命令逐个应用多个正则表达式。 这里是我的示例文件:awk的多个正则表达式

Start connection Test from LAN end 
Link are Test is complete available 
Test  
Start connection from LAN 
Test is complete 
end 
Test1 is complete 
Test2 is complete 
Link are available 
Link are Test is complete available 
Test1 

我想申请3个规则:

  1. 没有看到Startend
  2. 之间
  3. 没有看到 Linkavailable之间
  4. 看到Test

我已经使用三个AWK awk '/Start/ {f=1} !f; /end/ {f=0}',awk '/Link/ {f=1} !f; /available/ {f=0}'awk '/Test/{f=1}f;/complete/{f=0}' 现在我想要将所有在一起在一个AWK

我该怎么做?

回答

5

只要使用不同的虚拟变量:

awk '/Start/ {f=1} /Link/ {g=1} /Test/ {h=1} !f && !g && h; /end/ {f=0} /available/ {g=0} /complete/ {h=0}' 
1

这个单一的awk应该工作:

awk '{ 
    gsub(/Start.*end/, ""); 
    gsub(/Link.*available/, ""); 
    split($0, a, "\n"); 
    for (i=0; i<length(a); i++) 
     if (index(a[i], "Test")) 
     print a[i] 
}' RS= file