使用awk的多个正则表达式

时间:2013-10-27 09:48:36

标签: regex linux awk

我有一个档案。我必须在Linux中使用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. 之间看不到
  5. 请参阅Test
  6. 我使用了三个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

    我该怎么做?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分: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