使用perl脚本输出可读的dmesg时间

#!/usr/bin/perl

use strict;
use warnings;

my @dmesg_new = ();
my $dmesg = "/bin/dmesg";
my @dmesg_old = `$dmesg`;
my $now = time();
my $uptime = `cat /proc/uptime | cut -d"." -f1`;
my $t_now = $now - $uptime;

sub format_time {
my @time = localtime $_[0];
$time[4]+=1; # Adjust Month
$time[5]+=1900; # Adjust Year
return sprintf '%4i-%02i-%02i %02i:%02i:%02i', @time[reverse 0..5];
}

foreach my $line ( @dmesg_old )
{
chomp( $line );
if( $line =~ m/\[\s*(\d+)\.(\d+)\](.*)/i )
{
# now - uptime + sekunden
my $t_time = format_time( $t_now + $1 );
push( @dmesg_new , "[$t_time] $3" );
}
}

print join( "\n", @dmesg_new );
print "\n";

脚本下载地址:dmesg.tar

Mac/Linux下的批量文件编码转换

用了很多次的东西,放到自己的blog记录一下。

1. 新建一个文件夹,这里取根目录下的文件夹 encoding ,然后将要转换的文本拉入这个文件夹。
2. 打开终端,输入以下代码:

cd /encoding
find *.txt -exec sh -c "iconv -f GB18030 -t UTF8 {} > {}.txt" \;

上面的命令是针对GB18030,如果你转换前的编码为GB2312,将 GB18030 代替为 GB2312 即可。同理,若文件名后缀不是.txt,则做相应的修改即可。