2016-07-06 58 views
2

我有一个函数设置用于以彩色尾部文件。Awk:使用ANSI转义序列的字符串否定

function testtail { 
tail -f -n100 $1 | awk '/SNMP/ {print "\033[1;33m" $0 "\033[39m"}' 
} 

可正常工作和打印包含SNMP在我指定的颜色,但我怎么会告诉awk来也否定用绳子SNMP任何行中的所有行,以便指不以另一种颜色匹配SNMP打印线?我曾尝试:

function testtail { 
tail -f -n100 $1 | awk '/SNMP/ {print "\033[1;33m" $0 "\033[39m"}' '!/SNMP/ {print "\033[1;34m" $0 "\033[39m"}' 

} 

这:

function testtail { 
tail -f -n100 $1 | awk '/SNMP/ {print "\033[1;33m" $0 "\033[39m"}' | awk '!/SNMP/ {print "\033[1;34m" $0 "\033[39m"}' 

} 

但无论工作。我怎样才能做到这一点?

回答

2

对我来说,它看起来像你正在寻找一个if-else条件:

... | awk '{if ($0 ~ /SNMP/) {print "\033[1;33m" $0 "\033[39m"} else {print XXX}}' 

哪里XXX可以任何你想要的。

或者更地道:

... | awk '/SNMP/ {print "\033[1;33m" $0 "\033[39m"; next} {print XXX}' 

由于这些都是要打印的字符串:

  • "\033[1;33m" $0 "\033[39m"
  • "\033[1;34m" $0 "\033[39m"

你实际上可以使用一个变量来设置33或34,并保持其余的不变。

+0

@Paul感谢您的编辑!但请注意'print'和'print $ 0'完全等价。如果我写了'XXX'不是写所有'\ 033'等:D – fedorqui

+0

这两个解决方案都可以工作,但是当我按c来杀死testtail命令时,我的提示变成了红色。任何想法都是关于什么的? – user53029

+0

@ user53029这是因为你在那里留下了一些开放代码。 – fedorqui