bashはファイルの大文字と小文字の一致パターンを無視し、行の色を指定し、すべてを画面に印刷します。

bashはファイルの大文字と小文字の一致パターンを無視し、行の色を指定し、すべてを画面に印刷します。

私が望むのは、catログファイルをインポートして、パターンの一致に応じて特定の行を色で強調表示することです。しかし、到着大文字と小文字を無視。たとえば、

  • ログファイルに成功という単語が表示されたら、その行を緑色に設定します。
  • エラーが見つかった場合は、線を赤で表示するなどの操作を実行します。

これが私が今まで持っているものです。これはcatとawkに基づいています(もちろん私が使用するときはman awkmanを代わりに使用しますgawk)。私はDebian Jessieを使用しています。

 #!/bin/bash

[ $# -ge 1 -a -f "$1" ] && logfile="$1" || logfile="-"
cat $logfile | awk '
/install/ {print "\033[32m" $0 "\033[39m"}
/success/ {print "\033[32m" $0 "\033[39m"}
/status/ {print "\033[33m" $0 "\033[39m"}
/info/ {print "\033[33m" $0 "\033[39m"}
/error/ {print "\033[31m" $0 "\033[39m"}
/fail/ {print "\033[31m" $0 "\033[39m"}
'

色々なものを使ってみましたが、結局すべてのテキストが単色になったり、色がない、大文字と小文字が無視されなくなりました。 IGNORECASE=1 のようなものは動作しないようです。

他の質問からこのスクリプトをインポートしたので、他のものを使用してうれしいです。以下は、誰かが新しいスクリプトを提案したい場合に備えて、私が望むものです。

  1. ファイル名の後にコマンドを使用し、内容を端末に印刷します(bashを使用するのが理想的です)。
  2. 私のスクリプトで一致させる文字列を追加し、ログ/テキストファイルのこの行が画面に印刷されたときに色が表示されるようにしたいと思います。例えば。エラーという単語を見つけて、線を赤で塗ります。
  3. 一致させたい単語の大文字と小文字を無視します。 「error」、「error」という単語を検索するか、「error」または「error」などのように、大文字と小文字の組み合わせを検索します。これにより、その行が画面に赤で印刷されます。

アイデアは、Apacheアクセスログのようなものだけでなく、いくつかのバックアップの重要な部分を簡単に見つけることができるということです。私が望む重要なキーワードを見つけて、単にスクリプトに追加します。

以下は、ログファイルの開始と終了の例です。

INFO: tar attempt number 0
/home/user/domains/
/home/user/domains/website.com/
/home/user/domains/website.com/logs/
/home/user/domains/website.com/logs/Apr-2015.tar.gz.4
/home/user/domains/website.com/logs/Apr-2015.tar.gz
/home/user/domains/website.com/logs/Apr-2015.tar.gz.1
/home/user/domains/website.com/logs/Apr-2015.tar.gz.3
/home/user/domains/website.com/logs/Apr-2015.tar.gz.2
/home/user/domains/website.com/public_html/
/home/user/domains/website.com/public_html/api.php
/home/user/domains/website.com/public_html/index.html
/home/user/domains/website.com/public_html/favicon.ico
/home/user/domains/website.com/public_html/favicon1.ico
SUCCESS: website tar exists.
INFO: DB backup dump, attempt number 0
SUCCESS: DB backup file created.
/home/user/dakka_backups/user_db-Thu.2015-04-30.sql
INFO: CN Website and DB backed up on Thu.2015-04-30.

答え1

awkには「tolower」という機能があります。

cat $logfile | awk '
     tolower($0) ~ /install/ {print "\033[32m" $0 "\033[39m"; next;}
     tolower($0) ~ /success/ {print "\033[32m" $0 "\033[39m"; next;}
     tolower($0) ~ /status/ {print "\033[33m" $0 "\033[39m";  next;}
     tolower($0) ~ /info/ {print "\033[33m" $0 "\033[39m";    next;}
     tolower($0) ~ /error/ {print "\033[31m" $0 "\033[39m";   next;}
     tolower($0) ~ /fail/ {print "\033[31m" $0 "\033[39m";    next;}
     { print; }
'

shopt -s nocasematchBashを使用すると、大文字と小文字を区別しないパターンマッチングを使用できます。例えば。

mystring="AbCdEfG"
shopt -s nocasematch
if [[ ${mystring} == abcdefg ]] ; then
     echo "is a match!!"
fi

関連情報