2016-07-06 73 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

相關問題