2013-10-27 3 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. не видят между Start и end
  2. не видят между Link и available
  3. см 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 
Смежные вопросы