自从 2005年08月 ↓

sed&awk(译)

序言
本书是关于一组名称奇怪的UNIX实用程序,sed和awk的。这些程序有很多共同的东西,包括用来模式匹配的正则表达式的使用。由于模式匹配是它们的使用中的重要的部分,所以本书非常全面的介绍了UNIX的正则表达式语法。因为从grep到sed到awk的学习是一个自然的过程,我们涵盖了这三个程序,当然重点还是sed和awk。
sed和awk是用户,程序员和系统管理员--任何工作于文本文件的人使用的工具。sed,这样叫是因为它是一个流编辑器,完美的应用于大量文件的一系列编辑。awk,是以它的开发者Aho,Weinberger,和Kernighan来命名的,它是一个编程语言,提供结构化数据的简便处理和格式化报告的产生。本书强调awk的POSIX定义。另外,在讨论awk的三个免费实用版本和两个商业版本之前,本书简单的描述了awk的原始版本,所有这些构成了POSIXawk。
本书的重点是给sed和awk写脚本来快速解决用户的各种问题。很多这些脚本可以叫做“quick-fixes”,另外,我们也涉及解决更大问题需要更仔细设计和开发的脚本。
本手册的范围
第一章,编辑的利器,是sed和awk的特性和性能的概述。
第二章,理解基本操作,演示了sed和awk的基本操作,展示了从sed到awk的功能性的连续。共享类似的命令行语法,接受脚本形式的用户指令。
第三章,理解正则表达式语法,详细描述UNIX正则表达式语法。新用户常常被这些用来作模式匹配的奇怪的表达式吓倒。精通正则表达式语法对掌握sed和awk是非常重要的。本章中的模式匹配例子大多依赖于grep和egrep。
第四章,写sed脚本,开始关于sed的三章。本章包括只使用几个sed命令写一个sed脚本的几本原理。同时也提供了一个shell脚本来简单的调用sed脚本。
第五章,基本的sed命令,和第六章,高级sed命令,把sed命令分成基础和高级两个部分。基本命令是类似手动编辑的命令,高级命令引入了简单的编程能力。
第七章,写awk脚本,开始关于awk的七章。这章展示了这个脚本语言的主要特性。解释了包括修改ls命令输出的一个在内的大量脚本。
第八章,条件,循环和数组,描述如何使用通常的编程结构例如条件,循环和数组。
的九章,函数,描述如何使用awk的内置函数例如如何些用户定义的函数。
第十章,底部抽屉,包括各种awk话题,描述了如何从一个awk脚本执行UNIX命令以及如何直接输出到文件和管道。然后提供了一些(很少)调试awk脚本的建议。
第十一章,awk集合,描述了原始的V7版本的awk,当前的Bell Labs awk,来自Free Software Foundation由Michael Brennan编写的GUN awk(gawk)。后面三个都有免费可用的源代码。这章也描述了两个商业实现,MKS awk和Thomson Automation awk(tawk),还有VSAwk,它给Visual Basic环境提供了类似awk的功能。
第十二章,完整功能的应用程序,提供了两个更长,更复杂的awk脚本一起演示了语言的几乎所有性能。第一个脚本是一个交互拼写检查器。第二个脚本处理并格式化一本书的所以或者一组书的主索引。
第十三章,脚本的混合,提供大量用户建立的脚本,展示了sed和awk脚本的不同风格和技术。
附录A,sed快速参考,描述了sed的命令和命令行参数的快速参考。
附录B,awk的命令行参数的快速参考和它的脚本语言的完整描述。
附录C,第十二章的补充,提供了的十二章中描述的spellcheck.awk脚本和masterindex shell脚本的完整列表。
第一章,编辑的利器。
我妻子不让我买动力锯子。如果我用这样的锯子她害怕出事。因此我使用手动锯子来处理各种周末项目例如制作架子。然而,如果我作为一个木匠活着,我将必须使用一个动力锯子。它提供的速度和效率将大大提高生产率。
对于那些建立和修改文本文件的人来说,sed和awk就是他们编辑时的动力锯子。大部分你可以用这些程序来做的事情都可以用一个文本编辑器来交互地完成。然而,使用sed和awk可以在达到同样目标的情况下节省很多重复的时间。
sed和awk很特别,学起来需要时间,但是他们提供的性能可以多倍的偿还你的学习时间,特别是如果文本编辑是你日常工作一部分的话。
1.1你可能解决的有趣的问题
Continue reading →

沉痛悼念彪哥!

我是今天晚上才听说这个不幸的消息的,真的很突然,以致到现在还不能完全接受。
“你好,北影厂彪子。”
人的生命,尤其是好人的生命,实在太短暂了,一闪即逝,让人措不及防,一个时刻给大家带来快乐的人,就这样永远的离我们而去了。一想到彪哥,就是他憨厚的样子,不管荧幕上还是生活里,典型的好人。
短暂但闪光的一生。
祝彪哥一路走好!

失败的旅行

最失败的旅行莫过于在车上度过大部分的时间。如果可以,我宁愿把这时间花在走路上。
我们这次的旅行过程是这样的:早晨7点半开始坐在车上,9点半出发,下午四点到达目的地--辽宁绥中,吃午饭,然后自由活动,晚饭之后篝火,11点半睡觉。第二天6点半起床吃早饭,8点出发下午2点到达北戴河,午饭之后自由活动4点出发回北京,大约9点到家里。大部分时间我们都是在车上以极其不舒服的姿势睡觉。
总结:
1.如果时间不是足够长,最好不要去太远的地方旅行,周边郊区挺好的
2.永远不要相信导游的话
3.集体出游的时候别指望吃什么海鲜之类的,根本就是瞎掰
4.高速公路不一定都是高速的
5.每年夏天这个时候千万不要去北戴河,情形就像用洗了30双脚的洗脚水煮饺子
6.在大巴车上睡觉容易得颈椎疾病

god,我相信今后再也不会有比这个还糟糕的旅行了。

忙忙碌碌的一周

几天没更新了。
上个周五晚上登上回家 的火车,周六赶上吃午饭,匆匆忙忙的在家里呆了差不多4天。
家里的生活依旧日夜轮转,井然有序,父母依旧忙忙碌碌,朝夕劳作,不过身体都还好,只是比上次看见又稍稍的老了一些。
家里的天空依然湛蓝湛蓝,映衬下的白云也白的刺眼,举目望去,满眼的绿色一直铺到地平线。
夜空下还是那样皓月当空,繁星满天。许久没有见到了。
从我转身要回来的那一刻,我已经开始想家了。
昨天夜里12点半到达北京站,
今天继续上班,明天7点半集合出去玩~~
等有空把一路上的照片放到随机显示的文件夹下面。
累。

Wordpress图片随机显示

修改theme的时候在旁边加了一个显示图片的sidebar,每当看到喜欢的图片就想着换上去,可是每次上传图片,然后去修改源文件实在很麻烦,于是想找个一劳永逸的办法。四处找了一下,原来有这个需求的不只我一个,别人早就想到了怎么解决这个问题,例如我这位朋友这位朋友,分别各自写了一个Wordpress的插件,用来随机显示图片的。偶看了一下,各有优点。SuperTaoer甚至想到了用Session来解决重复显示的问题,呵呵。
我这里想说的是另外一种方法:
我找到了Matt写的一段从目录中读取图片文件随机显示的代码,如下:
<?php
/*
By Matt Mullenweg > http://photomatt.net
Inspired by Dan Benjamin > http://hiveware.com/imagerotator.php
Latest version always at:
http://photomatt.net/scripts/randomimage
*/

// Make this the relative path to the images, like “../img” or “random/i mages/”.
// If the images are in the same directory, leave it blank.
$folder = ‘’;

// Space seperated list of extensions, you probably won’t have to change this.
$exts = ‘jpg jpeg png gif’;

$files = array(); $i = -1; // Initialize some variables
if ('’ == $folder) $folder = ‘./’;
$handle = opendir($folder);
$exts = explode(’ ‘, $exts);
while (false !== ($file = readdir($handle))) {
foreach($exts as $ext) { // for each extension check the extension
if (preg_match(’/\.’.$ext.’$/i’, $file, $test)) { // faster than ereg, case insensitive 23 $files[] = $file; // it’s good
++$i;
}
}
}
closedir($handle); // We’re not using it anymore
mt_srand((double)microtime()*1000000); // seed for PHP < 4.2
$rand = mt_rand(0, $i); // $i was incremented as we went along
header(’Location: ‘.$folder.$files[$rand]); // Voila!
?>
在发布目录下建立上传图片的目录(例如,upload_images),将上面的代码保存为random.php放到图片目录(upload_images)中,然后在页面里要显示图片的地方加入
<img style=”" src=”/upload_images/random.php” />
在style中定义要显示的图片的样式,如大小,边框等等。
这样,就搞定了,把要显示的图片上传到upload_images目录中,程序就会读取目录,然后随机显示图片了。

禁止浏览器缓存站点地址

HTM

<META HTTP-EQUIV=”pragma” CONTENT=”no-cache”>
<META HTTP-EQUIV=”Cache-Control” CONTENT=”no-cache, must-revalidate”>
<META HTTP-EQUIV=”expires” CONTENT=”Wed, 26 Feb 1997 08:21:57 GMT”>

ASP

<%
Response.Expires = -1
Response.ExpiresAbsolute = Now() - 1
Response.cachecontrol = “no-cache”
%>

PHP

header(”Expires: Mon, 26 Jul 1997 05:00:00 GMT”);
header(”Cache-Control: no-cache, must-revalidate”);
header(”Pragma: no-cache”);

JSP

response.setHeader(”Pragma”,”No-Cache”);
response.setHeader(”Cache-Control”,”No-Cache”);
response.setDateHeader(”Expires”, 0);

C#

Response.Buffer=true;
Response.ExpiresAbsolute=System.DateTime.Now.AddSeconds(-1);
Response.Expires=0;
Response.CacheControl=”no-cache”;

你用RSS阅读器吗?

我订阅了很多牛blog和一些新闻站点提供的RSS,阅读RSS方式有两类,Web的和App的阅读器。
Web的,例如rojo。App的例如Windows平台的FeedDemon和Linux下的Liferea
他们都提供方便的阅读方式,速度也还过的去,在浏览订阅的大量RSS信息的时候必不可少。
但是,最近我越来越觉得只看这些文字内容是种损失,除了错过了很多不错的图片,同时也失去了欣赏站点Style的机会。很多blog或者新闻站点的风格都非常不错,都很值得直接去访问,毕竟,站点的拥有者是花了大量心思在自己的美观上面的(尤其是blog),就是为了让我们在浏览内容的同时,享受视觉盛宴。因此站点可以分成两类,用RSS阅读器来读的,和直接去访问的。
偶打算开发一个Wordpress的插件,可以随时方便的把浏览过的站点像网摘一样列在blog里,已备日后访问,应该很有意思。

纪念抗战胜利60周年

隔壁的东芝公司今天好像全体放假,大概是为了庆祝抗战胜利60周年吧。
60年前的今天,在我军队和人民的顽强抵抗之下,小日本宣布无条件投降,滚回了老家。今天,日本就是变态恶心的代名词,继续恬不知耻的不断挑起事端,在世界历史舞台扮演越来越无耻的角色。
消灭小日本,义不容辞。

你为什么要写blog?

我的blog建立已近一个月了,在这将近一个月的时间里,偶用心的经营着自己的地盘,想努力把它打造成一个自己想象中的blog,尽管想象中的blog到底是什么样,自己也没有确切的标准和参考。写着,然后每天盯着自己的访问统计数据,一点点的增长和改变都会让我无比的欣喜。
可最近我一直都在想,我是为了什么在写blog?为了访问量吗?我又不打算放什么广告,访问量于我有什么用呢?尽管有很多时候,别人的关注真的是自己写下去的巨大动力,就算没有回复。所以渐渐的,不再那么热衷于去看统计数据了。写自己想写,才是真正的blog吧。
不必让每个人都知道我的blog,但是务必要让每个看我的blog的人都能了解一个真实的我。
所以,偶不用努力的装成大牛言必称Web2.0。偶不用整天的极端和愤青。不用见谁都不顺眼。不够累的。嘿嘿。
写并快乐着。

周末.西单

你去过西单吗?
你周末去过西单吗?
你在桑拿天的周末去过西单吗?
刚一到我还以为有啥东西不要钱,大家才这样积极,原来满不是这么回事,除了打折返券跳楼吐血甩卖,并没有不要钱的。大家之所以如此在恶劣环境下积极逛街,除了由于人民生活水平极大提高以及物质的极大丰富,再也没有合理的解释了。