cat主要有三大功能:
1.一次顯示整個(gè)文件。$ cat filename
2.從鍵盤創(chuàng)建一個(gè)文件。$ cat > filename
3.將幾個(gè)文件合并為一個(gè)文件。 $cat file1 file2 > newfile
好的。來實(shí)戰(zhàn)一下,比如以哈佛校訓(xùn)中英文文件為例。(
哈佛校訓(xùn)在這)壓縮包里面有兩個(gè)文件:hafo.txt和 哈佛大學(xué)校訓(xùn).txt ,分別是校訓(xùn)的英文版和中文版。于是我們把他解壓到一個(gè)目錄。現(xiàn)在想在終端中瀏覽文件。
$ cat hafo.txt
$ cat 哈佛大學(xué)校訓(xùn).txt
OK,so easy!不過我希望把兩個(gè)文件合并成一個(gè)文件,這樣就可以結(jié)合中英文對(duì)照看了,怎么辦呢?
$ cat hafo.txt 哈佛大學(xué)校訓(xùn).txt > hafo
$ cat hafo
恩,it is easy too!
不過,現(xiàn)在somebody希望在文字前面都有行號(hào)。(還當(dāng)代碼看呢?)所以需要把兩者合并成一個(gè)有行號(hào)的文件,不過就這點(diǎn)小需求,我們還是能很容易滿足他的。
$ cat -b hafo.txt 哈佛大學(xué)校訓(xùn).txt > hafo
$ cat hafo
這樣可以看到hafo文件是已經(jīng)包含行號(hào)了。
恩。一切都很順利,但是“世間本無事,庸人自擾之”。所以為了找點(diǎn)事做,庸人Yong出場(chǎng)了。
故事是這樣的:Yong以前有文件hafo.txt,然后他賣弄才華給文件標(biāo)出行號(hào)弄成了一個(gè)新文件hafo.你知道其實(shí)這是很簡(jiǎn)單的事情了
$ cat -b hafo.txt > hafo
大功告成!Yong認(rèn)為自己真應(yīng)該去念哈佛了!現(xiàn)在hafo.txt就多余了,Yong果斷的刪掉了這個(gè)文件來體現(xiàn)自己的魄力!
但是事實(shí)上這家伙E文實(shí)在so pool,所以他終于找來了一份中文的《哈佛大學(xué)校訓(xùn).txt》。好了,他很開心,現(xiàn)在他想也把這份中文的也接到hafo文件后,以便對(duì)照中英文看,當(dāng)然同樣的他要求有同樣的行號(hào),怎么辦呢?那有什么難的!Yong馬上敲出如下指令:
$ cat -b 哈佛大學(xué)校訓(xùn).txt >> hafo
任務(wù)完成了嗎?好像完成了。不過當(dāng)他敲出如下
$ cat hafo
之后,發(fā)現(xiàn)地球好像沒有按他的思維轉(zhuǎn)!是的,有一點(diǎn)小異常:因?yàn)橹形男S?xùn)部分固然已經(jīng)編號(hào),但是卻并沒有接著前面的編號(hào),而是自立爐灶從1開始編號(hào)!這個(gè)不行,沒有符合我的需求。畢竟我要行號(hào)的目的是一眼要能看出來這個(gè)文件一共有多少行的。。。
怎么辦呢?現(xiàn)在最原始的那一招已經(jīng)不能用了,因?yàn)閔afo.txt已經(jīng)被刪除了。手頭上只有《hafo》和《哈佛大學(xué)校訓(xùn).txt》了。Yong真是悔恨呀!沖動(dòng)是魔鬼呀!不然現(xiàn)在只要一句
$ cat -b hafo.txt 哈佛大學(xué)校訓(xùn).txt > hafo
就一起萬事大吉了!但是不行了,人,必須要為自己所做的一切負(fù)責(zé)!如果做了錯(cuò)事,就必然要付出代價(jià)。
好了,Yong的故事到此結(jié)束了。但是本文還沒結(jié)束,因?yàn)槲覀兣cYong這種庸人是完全不同的,所以下面就是解決這個(gè)問題的辦法。
針對(duì)這個(gè)問題,我們的一個(gè)考慮是可以有hafo盡量反原成hafo.txt的樣子,即是去掉現(xiàn)有的行號(hào),然后在將反原的文件采用已知的辦法來生成新的文件。但是怎么去掉行號(hào)呢?
這里就要提到正則表達(dá)式了,關(guān)于正則表達(dá)式語法其實(shí)很簡(jiǎn)單,只是這個(gè)東西最關(guān)鍵的是必須經(jīng)常寫才能記住才能掌握。如果不太熟悉這些,網(wǎng)上介紹還是很多的,可以參考這個(gè)朋友的總結(jié):
http://hi.baidu.com/ismayday/blog/item/7f5b86942741d11dd21b708f.html。
好了,現(xiàn)在對(duì)已有的hafo文件,我們發(fā)現(xiàn)他的特點(diǎn)是
[幾個(gè)空格]行號(hào)[一個(gè)tab]正文
所以我們只要把這正文前面的東西替換為空就行了。確定正文前的內(nèi)容:'^[ \t]*\d*\t'
現(xiàn)在要做的工作就是從hafo文件反原成之前沒有添加行號(hào)的版本,我們可以命名為noline
$ cat hafo | perl -pi -e 's|^[ \t]*\d*\t||g' >> noline
$ cat noline
看看,是不是回到之前的樣子了!恩,應(yīng)該是沒有錯(cuò)的!看來,世界還是很美好的!
好了,剩下的就規(guī)約為我們已知的方法了:
$ cat -b noline 哈佛大學(xué)校訓(xùn).txt > hafo
$ cat hafo
好了!貓的問題就介紹到這里,本文中由貓引起的 正則表達(dá)式 和 perl功能沒有展開講,到了以后具體的主題再講。