如有这样的访问url日志(access.log),若访问某个url失败了,会打印一行访问失败信息。
http://a.com
WARN 404 access fail
http://b.com
http://c.com
WARN 405 access fail
http://d.com
http://e.com
WARN 500 access fail
现在想得到那些访问失败的url,可以通过如下的脚本来得到:
sed -n '{/access fail/{g;p}};h' access.log
输出为:
http://a.com
http://c.com
http://e.com
解释(来自运维同事):
sed 会逐行处理文件, 首先判断该行是否匹配(或包含)access fail关键字,
若没有匹配,仅执行h,即将该行以覆盖方式放到后台(一个缓冲区);
若匹配上了,则执行后面的命令({g;p}),g表示将后台内容挪到前台来(即将上一行覆盖当前行内容),p打印该行。