无我

让内心永远燃烧着伟大的光明的精神之火!
灵活的思考,严谨的实现
豪迈的气魄、顽强的意志和周全的思考

从一只猫开始学习linux指令

一花一世界,一叶一菩提。我们就从一只猫开始学习linux指令吧。
猫?cat!不过此猫并非真正的猫的意思。他是Linux Cat,它是 concatenate(连锁) 的简写,意思是合并文件。

Linux Cat使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName
Linux Cat说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting

cat主要有三大功能:
1.一次显示整个文件。$ cat   filename
2.从键盘创建一个文件。$ cat  >  filename 
3.将几个文件合并为一个文件。 $cat   file1   file2  > newfile

好的。来实战一下,比如以哈佛校训中英文文件为例。(哈佛校训在这)压缩包里面有两个文件:hafo.txt和 哈佛大学校训.txt ,分别是校训的英文版和中文版。于是我们把他解压到一个目录。现在想在终端中浏览文件。
$ cat hafo.txt
$ cat 哈佛大学校训.txt
OK,so easy!不过我希望把两个文件合并成一个文件,这样就可以结合中英文对照看了,怎么办呢?
$ cat hafo.txt 哈佛大学校训.txt > hafo
$ cat hafo
恩,it is easy too!

不过,现在somebody希望在文字前面都有行号。(还当代码看呢?)所以需要把两者合并成一个有行号的文件,不过就这点小需求,我们还是能很容易满足他的。
$ cat -b hafo.txt 哈佛大学校训.txt > hafo
$ cat hafo
这样可以看到hafo文件是已经包含行号了。

恩。一切都很顺利,但是“世间本无事,庸人自扰之”。所以为了找点事做,庸人Yong出场了。
故事是这样的:Yong以前有文件hafo.txt,然后他卖弄才华给文件标出行号弄成了一个新文件hafo.你知道其实这是很简单的事情了
$ cat -b hafo.txt > hafo
大功告成!Yong认为自己真应该去念哈佛了!现在hafo.txt就多余了,Yong果断的删掉了这个文件来体现自己的魄力!
但是事实上这家伙E文实在so pool,所以他终于找来了一份中文的《哈佛大学校训.txt》。好了,他很开心,现在他想也把这份中文的也接到hafo文件后,以便对照中英文看,当然同样的他要求有同样的行号,怎么办呢?那有什么难的!Yong马上敲出如下指令:
$ cat -b 哈佛大学校训.txt >> hafo
任务完成了吗?好像完成了。不过当他敲出如下
$ cat hafo
之后,发现地球好像没有按他的思维转!是的,有一点小异常:因为中文校训部分固然已经编号,但是却并没有接着前面的编号,而是自立炉灶从1开始编号!这个不行,没有符合我的需求。毕竟我要行号的目的是一眼要能看出来这个文件一共有多少行的。。。

怎么办呢?现在最原始的那一招已经不能用了,因为hafo.txt已经被删除了。手头上只有《hafo》和《哈佛大学校训.txt》了。Yong真是悔恨呀!冲动是魔鬼呀!不然现在只要一句
$ cat -b hafo.txt 哈佛大学校训.txt > hafo
就一起万事大吉了!但是不行了,人,必须要为自己所做的一切负责!如果做了错事,就必然要付出代价。

好了,Yong的故事到此结束了。但是本文还没结束,因为我们与Yong这种庸人是完全不同的,所以下面就是解决这个问题的办法。
针对这个问题,我们的一个考虑是可以有hafo尽量反原成hafo.txt的样子,即是去掉现有的行号,然后在将反原的文件采用已知的办法来生成新的文件。但是怎么去掉行号呢?
这里就要提到正则表达式了,关于正则表达式语法其实很简单,只是这个东西最关键的是必须经常写才能记住才能掌握。如果不太熟悉这些,网上介绍还是很多的,可以参考这个朋友的总结:http://hi.baidu.com/ismayday/blog/item/7f5b86942741d11dd21b708f.html
好了,现在对已有的hafo文件,我们发现他的特点是
[几个空格]行号[一个tab]正文
所以我们只要把这正文前面的东西替换为空就行了。确定正文前的内容:'^[ \t]*\d*\t'

现在要做的工作就是从hafo文件反原成之前没有添加行号的版本,我们可以命名为noline
$ cat hafo | perl -pi -e 's|^[ \t]*\d*\t||g' >> noline
$ cat noline
看看,是不是回到之前的样子了!恩,应该是没有错的!看来,世界还是很美好的!

好了,剩下的就规约为我们已知的方法了:
$ cat -b noline 哈佛大学校训.txt > hafo
$ cat hafo

好了!猫的问题就介绍到这里,本文中由猫引起的 正则表达式 和 perl功能没有展开讲,到了以后具体的主题再讲。

posted on 2011-08-02 18:14 Tim 阅读(2362) 评论(0)  编辑 收藏 引用 所属分类: linux学习


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

公告

本博客原创文章,欢迎转载和交流。不过请注明以下信息:
作者:TimWu
邮箱:timfly@yeah.net
来源:www.cppblog.com/Tim
感谢您对我的支持!

留言簿(9)

随笔分类(173)

IT

Life

搜索

积分与排名

最新随笔

最新评论

阅读排行榜