看到以前的一道shell面试题,心血来潮,看看自己现在能做了吗?!小试一下……

在access.log中截取 16/Aug/2010:14:31:30到17/Aug/2010:10:12:07间的日志信息,并输出到log.txt中,我的思路,用sed打印16/Aug/2010:14:31:30和17/Aug/2010:10:12:07间的日志并>

#!/bin/bash

n1=`grep -n '16\/Aug\/2010:14:31:30' access.log|head -1|cut -d ':' -f1`

n2=`grep -n '17\/Aug\/2010:10:12:07' access.log|tail -1|cut -d ':' -f 1`

sed -n "${n1},${n2}p" access.log >log.txt

另外sed还有更简单的方法

sed -n '/16\/Aug\/2010:14:31:30/,/17\/Aug\/2010:10:12:07/'p >log.txt

但是此命令思路是对的,可是当access.log 在同一时间内有大量并发访问日志时,这个就不准确了。最完善的还要算第一种思路。