Разрешить только ssh / vpn в OpenWRT

Вы можете сделать что-то вроде:

tail -f example.log | awk '
  BEGIN {
    n = split("pattern1,pattern2,pattern3,pattern4,pattern5", pats, /,/)
  }
  {
    found=0
    for (i in pats) if ($0 ~ pats[i]) {
      found=1
      delete pats[i]
      n--
    }
  }
  found {print; if (!n) exit}'

Обратите внимание, что awk завершится, как только увидит все шаблоны, но tail выйдет только (из SIGPIPE) ) только в следующий раз, когда он что-то напишет после этого.

Или, если строки могут не соответствовать нескольким шаблонам, и если вы не заботитесь о выходе, когда все шаблоны найдены, короче, но менее эффективно:

awk '/pattern1/&&!a++ || /pattern2/&&!b++ || /pattern3/&&!c++ || \
     /pattern4/&&!d++ || /pattern5/&&!e++'

С zsh и GNU grep :

(trap '' PIPE;tail -f example.log > >(grep -m1 pattern1) \
                                  > >(grep -m1 pattern2) \
                                  > >(grep -m1 pattern3) \
                                  > >(grep -m1 pattern4) \
                                  > >(grep -m1 pattern5))

Но учтите, что строки, соответствующие нескольким шаблонам, будут напечатаны столько раз.

1
17.07.2011, 22:14
0 ответов

Теги

Похожие вопросы