命令与征服

首先,这篇日志和技术有关,应该用英文写的,但里面夹杂了一些中文的元素,就写成中文了。 这个题目,作为游戏的名字就是“命令与征服”,作为Full Circle中文杂志的一个栏目名,就是“决胜命令行”。 人们总在做关于图形界面与命令行的争论,其实,二者各有优缺点。图形界面总能给人一种直观的感受,在一定程度上提高工作效率。但是,任何事都有它的局限性。如果画一个圆,里面的空间代表图形界面所擅长的工作,那么,这个圆环外面的整个空间都应该属于命令行! 命令行也有它的局限性,用手敲命令的时间有时并不一定比把鼠标移到某个菜单并点一下快。而且,尤其是对于非英语国家的人来说,了解那么多的命令和参数并不是一件容易的事情,尽管man命令可以帮助我们很多。 命令行的一个杀手应用就是批处理。如果你需要对几十个,甚至几百个文件进行类似的操作,摆在你面前的有三条路:1. 等专门的软件被写出来。2. 自己纯手工对这几百个文件处理。3.动手写个脚本。 在Linux世界,如果你要完成一项工作,有三条法则: 如果有现成的软件,使用它。 如果需要使用几个软件来完成,用管道或其他东西把他们连接起来。 否则,自己写程序完成它。 使用命令行,使用脚本,应该是介于第二条和第三条之间。脚本是用于把几个程序连接起来的工具,当然,也算是自己写的一个程序。 在批处理中,我们可以通过脚本,通过定义的一些变量,甚至一些循环、判断语句来很轻松地完成工作。当然,这一些的基础就是命令行,脚本很难通过图形界面和其他程序交互。当然,也有一些在命令行中生成GUI的工具,例如zenity。 大概半年前,我做史记的电子书。其中,一个文件夹下的文件是这样的: 001.txt 002.txt 003.txt … 130.txt 文件的开头是这样的: 史记 史记卷一 五帝本纪 第一 *集解凡是徐氏义,称徐姓名以别之。余者悉是骃注解,并集觽家义。索隐纪者,记 也。本其事而记之,故曰本纪。又纪,理也,丝缕有纪。而帝王书称纪者,言为后代纲 … 我要作的就是把每个文件的文件名都改成这样的: 1_卷一五帝本纪第一.txt 在社区牛人们的帮助下,最终写出了如下脚本: #!/bin/sh for i in *.txt; do f=${i%.*} t=`head -n 2 $i | tail -n 1 | awk ‘{print substr($1,3,length($1)-1)}’` cp $i ./tt/$f$t.txt echo $i done 当然,这是是个初步的脚本,以后还设计到全角半角空格的问题,文件编码等问题,就都不难解决了。 [...]