seb*_*lle 2 apache bash perl alias
要格式化我的apache error_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";'
Run Code Online (Sandbox Code Playgroud)
我想将脚本添加到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";'
Run Code Online (Sandbox Code Playgroud)
显然,逃避报价开始变得混乱.我也尝试将perl脚本放在自己的文件中并将其作为别名运行但我想避免在.bash_profile文件之外运行脚本以实现可移植性.
如何将perl脚本用作bash别名/函数?还是我从完全错误的方向来到这里?
你绝对应该使用函数而不是别名:
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";
'
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
578 次 |
最近记录: |