2

私のapacheerror_logをフォーマットして、より見やすくするために、私はすばやく汚いperlスクリプトを作成しました。

tail -f /var/log/apache2/error_log | perl -ne 
  '($timeStamp, $error, $hostName, $message) = 
      /^\[([^\]]+)\] \[([^\]]+)\] (?:\[client ([^\]]+)\])?\s*(.*)$/i; # Parse log
   ($day, $month, $date, $time, $year) = 
      $timeStamp =~ m/(\S*) (\S*) (\S*) (\S*) (\S*)$/; # Extract the timestamp
   $message =~ s/, referer: (.*)$/\./;  # Strip the referer references
   $message =~ s/\\n/\n/g; # Replace literal new lines to expand object dumps
   print $time . " " . $date . " " . $month . " | " . $message ."\n";'

ターミナルから簡単に呼び出せるように、スクリプトをBashエイリアスに追加したいと思います。

例えば

alias te=tail -f /var/log/apache2/error_log | perl -ne '($timeStamp, $error, $hostName, $message) = /^\[([^\]]+)\] \[([^\]]+)\] (?:\[client ([^\]]+)\])?\s*(.*)$/i; ($day, $month, $date, $time, $year) = $timeStamp =~ m/(\S*) (\S*) (\S*) (\S*) (\S*)$/; $message =~ s/, referer: (.*)$/\./; $message =~ s/\\n/\n/g; print $time . " " . $date . " " . $month . " | " . $message ."\n";'

明らかに、引用符をエスケープすると、乱雑になり始めます。また、perlスクリプトを独自のファイルに入れてエイリアスとして実行しようとしましたが、移植性のために.bash_profileファイルの外部でスクリプトを実行する必要はありません。

perlスクリプトをbashエイリアス/関数として使用するにはどうすればよいですか?それとも私は完全に間違った方向からこれに来ていますか?

4

2 に答える 2

6

エイリアスの代わりに関数を使用する必要があります。

function te ()
{
    tail -f /var/log/apache2/error_log \
    | perl -ne \
       '($timeStamp, $error, $hostName, $message) = 
          /^\[([^\]]+)\] \[([^\]]+)\] (?:\[client ([^\]]+)\])?\s*(.*)$/i; # Parse log
        ($day, $month, $date, $time, $year) = 
          $timeStamp =~ m/(\S*) (\S*) (\S*) (\S*) (\S*)$/; # Extract the timestamp
        $message =~ s/, referer: (.*)$/\./;  # Strip the referer references
        $message =~ s/\\n/\n/g; # Replace literal new lines to expand object dumps
        print $time . " " . $date . " " . $month . " | " . $message ."\n";
       '
}
于 2012-09-24T01:49:44.550 に答える
0

変化する

alias te=tail -f /var/log/apache2/error_log | perl -ne '...'

alias te='tail -f /var/log/apache2/error_log | perl -ne '\''...'\'''
于 2012-09-24T01:57:08.083 に答える