日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

使用 UNIX 進(jìn)行文本處理

Unix?起源于簡單的文本處理,并且在它的命令行環(huán)境中保留了功能最強(qiáng)大的文本處理工具之一 。通過將一系列簡單的命令組合在一起,可以完成復(fù)雜的文本轉(zhuǎn)換,UNIX 提供的工具允許您構(gòu)建幾乎任何所需的文本處理引擎 。
引言
在 UNIX?誕生之初,人們不大熟悉這種新的操作系統(tǒng),但他們很快找到了適當(dāng)?shù)那腥朦c,大學(xué)中的研究人員需要一種像樣的文本處理環(huán)境 。因為在那個時候,計算機(jī)的處理速度和內(nèi)存容量有限,所以程序必須很小,并且相對比較簡單 。這樣就產(chǎn)生了 UNIX 中著名的設(shè)計思想:“一組工具協(xié)同工作,以便完成一項任務(wù) 。通過 UNIX 管道將幾種很小的、但功能強(qiáng)大的文本處理工具組合在一起,可以對文本進(jìn)行各種方式的轉(zhuǎn)換和操作 。
在本文中,您將簡要了解從文件和程序中獲得文本、使用 tr 命令對其進(jìn)行簡單的轉(zhuǎn)換、使用 sed 命令進(jìn)行復(fù)雜的搜索和替換操作 。然后,您將使用 Perl 編程和腳本語言再次完成這些操作,這樣一來您就可以認(rèn)識到,Perl 的功能非常強(qiáng)大,它可以替代 tr 和 sed 命令 。
開始之前
如果您希望按照本文中的示例進(jìn)行實驗,請確保您可以使用 UNIX 命令行環(huán)境 。這可能是本地計算機(jī)中的終端模擬程序(在現(xiàn)代桌面中通常稱為 終端,如果您習(xí)慣使用 Windows?,那眉兩以使?Cygwin)、或通過 SSH 訪問的遠(yuǎn)程系統(tǒng) 。
本文的示例所使用的 Shell 語法適用于 GNU Bash,有關(guān)需要使用的特定語法,請參考您的 Shell 手冊(或者可以考慮使用 Bash) 。
對文本進(jìn)行各種操作
在開始使用 UNIX 的各種文本實用程序操作文本之前,需要了解如何獲得文本 。并且在進(jìn)行這項工作之前,需要了解 UNIX 的標(biāo)準(zhǔn)輸入/輸出 (I/O) 流 。
標(biāo)準(zhǔn) C 庫(因而,每個 UNIX 程序)定義了三種標(biāo)準(zhǔn)流:輸入、輸出和錯誤 。有時將它們稱為 stdin、stdout 和 stderr,這是在所有 C 程序中用來表示它們的全局變量 。
當(dāng)您在 Shell 中使用 > 操作符將程序輸出重定向到文件時,就可以將它的標(biāo)準(zhǔn)輸出 (stdout) 流發(fā)送到這個文件 。例如:ls > this-dir 將 ls 的輸出發(fā)送到一個名為 this-dir 的文件 。
當(dāng)您在 Shell 中使用 < 操作符將程序輸入重定向到文件時,就可以將該文件中的內(nèi)容輸入到該程序的標(biāo)準(zhǔn)輸入 (stdin) 流 。例如:sort < this-dir 可以從名為 this-dir 的文件中讀取內(nèi)容,并將其作為 sort 命令的輸入 。
另一個常用于重定向標(biāo)準(zhǔn)流的操作符是“|(管道)操作符,它可以將左側(cè)程序的標(biāo)準(zhǔn)輸出流連接到右側(cè)程序的標(biāo)準(zhǔn)輸入流 。例如:ls | sort 和前面的兩個示例完成相同的任務(wù),并且無需臨時文件,ls 的輸出直接進(jìn)入 sort 命令 。
如果您仔細(xì)觀察,那么可能會發(fā)現(xiàn),前面的這些示例中并沒有出現(xiàn)標(biāo)準(zhǔn)錯誤 (stderr) 流 。與標(biāo)準(zhǔn)輸出流一樣,可以對 stderr 進(jìn)行重定向或使用管道進(jìn)行傳輸,但是您需要告訴 Shell 您希望處理 stderr 而不是 stdout 。
可以使用 2> 操作符將標(biāo)準(zhǔn)錯誤流重定向到文件 。在處理生成有用的錯誤輸出的命令時,您經(jīng)常會看到這個操作符,比如用于編譯 Unix 程序的 make 工具:make 2> build-errors 。
這個命令運行了 make,并將任何錯誤信息發(fā)送到 build-errors 文件 。與之類似,您可以使用 2| 將 stderr 通過管道傳遞到另一個程序 。
如果您對具體的細(xì)節(jié)感興趣,那么其他的流也有與之對應(yīng)的數(shù)字,盡管很少使用到它們(0 表示標(biāo)準(zhǔn)輸入,1 表示標(biāo)準(zhǔn)輸出),除了在一個非常常見的操作符中 。在清單 1 所示的示例中,2>&1 操作符將標(biāo)準(zhǔn)錯誤流連接 到標(biāo)準(zhǔn)輸出流 。與 > 操作符組合在一起,您可以使 stderr 和 stdout 輸出到相同的文件中 。

推薦閱讀