2013-03-04 89 views
1

我編寫了一個bash腳本,它使用sed創建一個命令,該命令按關鍵字過濾文本,然後爲輸出着色。我做了很多嘗試和錯誤,並搜索技術。我知道這可以改善。任何人都可以提供建議嗎?通過關鍵字過濾日誌文件並着色輸出

我希望能夠像尾巴一樣使用它 - 實時過濾和顏色尾部輸出。有什麼想法嗎?

在此先感謝!

function multigrep(){ 

#THIS WORKS - Recreate this, using input parameters 
#sed -En '/(App)|(Spe)/p' ./flashlog.txt; 

filename="/Users/stevewarren/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt"; 
paramString=""; 

for element in "[email protected]" 
    do 
     #echo $element; 
     paramString="$paramString($element)|"; 
    done 

#TRIM FINAL | OFF PARAMSTRING 
paramString=${paramString:0:${#paramString}-1}; 

#CREATE SED EXPRESSION - '/($1)|($2)|(...)/p' 
paramString="'/$paramString/p'"; 

#CREATE SED FUNCTION, CALL ON FILE 
paramString="sed -En $paramString ./flashlog.txt" 

echo $paramString; 
echo "${txtbld}$(tput setaf 7)" > ./flashlog_output.txt; 
eval $paramString >> ./flashlog_output.txt; 
echo >> ./flashlog_output.txt; 
#cat ./flashlog_output.txt; 

cat ./flashlog_output.txt | while read LINE 
do 

    [[ $1 && ${1-x} ]] && 
     if grep -q $1 <<<$LINE; then 
      echo "$(tput setaf 3)$LINE" 
     fi 

    [[ $2 && ${2-x} ]] && 
     if grep -q $2 <<<$LINE; then 
      echo "$(tput setaf 7)$LINE" 
     fi 


    [[ $3 && ${3-x} ]] && 
     if grep -q $3 <<<$LINE; then 
      echo "$(tput setaf 6)$LINE" 
     fi 

done 

}

回答

3

你知道colortail?我也在使用它。您可以在配置文件中使用正則表達式配置着色。輸出將是這樣的:(是啊:)

enter image description here

+0

這正是我一直在尋找!非常感謝。 – 2013-03-05 01:22:25

+0

不客氣。我會建議你從源頭編譯它。 Linux發行版可能有舊版本的內存泄漏,有時令人討厭。但是,問題並不常見。 – hek2mgl 2013-03-05 01:27:49