Linux文件重定向和文件過濾器
Linux系統(tǒng)對所有的東西都是以文件的方式來進(jìn)行管理的,我們有必要對有關(guān)文件的操作進(jìn)行一些了解。
文件過濾器
用來讀取文件內(nèi)容和在文件內(nèi)容上執(zhí)行操作的命令有時(shí)被稱為過濾器。sed 和 awk 命令是兩個過濾器的例子,因?yàn)樵谝郧暗奈恼轮杏兴鼈冊敿?xì)的討論,在這里將略過。
諸如 cat、 more 和 less 之類的命令讓您能夠從命令行查看一個文本文件的內(nèi)容,而無需調(diào)用編輯器。Cat 是 "concatenate" 的縮寫,它將默認(rèn)地在標(biāo)準(zhǔn)輸出(顯示屏)上顯示文件內(nèi)容。和 cat 一起提供的最有趣的選項(xiàng)之一是 -n 選項(xiàng),它用編號的輸出行來顯示文件內(nèi)容。
$ cat -n test.out
1 This is a test.
因?yàn)?cat 一次性輸出文件中的所有行,所以您可能更喜歡用 more 和 less,因?yàn)樗鼈兌家淮屋敵鲆黄恋奈募?nèi)容。Less 是 more 的一個增強(qiáng)的版本,它允許用來自 vi 文本編輯器的關(guān)鍵命令來增強(qiáng)文件查看。例如,d 向前翻滾、b 向后翻滾 N 行(如果 N 是在 d 或 b 之前指定的)。為 N 輸入的值成為隨后的 d 命令的默認(rèn)值。man 頁面實(shí)用工具使用 less 來顯示使用說明的內(nèi)容。
Linux文件重定向和管道
Linux文件重定向允許將命令輸出重定向到文件中,而不是標(biāo)準(zhǔn)輸出,或者類似地,也可重定向輸入。Linux文件重定向的標(biāo)準(zhǔn)符號 > 創(chuàng)建一個新的文件。>> 符號將輸出添加到一個現(xiàn)有的文件中:
$ more test2.out
Another test.
$ cat test.out >> test2.out
$ cat test2.out
Another test.
This is a test.
到文件的標(biāo)準(zhǔn)輸入可以用 < 符號來重定向:
$ cat < test2.out
錯誤消息用 2> 和 2>> 來重定向和添加,格式如下:
$ command 2> name_of_error_file
要避免無意地覆蓋一個現(xiàn)有的文件,使用 BASH 內(nèi)置的命令集:
$ set -o noclobber
可以在命令和輸出文件之間用 >! 符號來重載這個特性。要關(guān)閉這個特性,用 +o 代替 -o。
Linux文件重定向在一個命令和文件之間、或文件和文件之間工作。Linux文件重定向語句的一項(xiàng)必須是一個文件。
管道使用 |符號,并且在命令之間工作。例如,您可以用以下方式將一個命令的輸出直接發(fā)送到打印機(jī)上:
$ ls -l * | lpr
可以用以下方式快速地找到歷史列表中的一個命令:
$ history | grep cat
更多的濾波器
Grep、fgrep 和 egrep 都顯示匹配一種模式的行。所有這三個命令都在文件中搜索指定的模式,如果您想不起來一個所需文件的名稱,這將非常有用?;靖袷绞牵?
grep [options] PATTERN [FILE...]
$ grep -r 'Subject' nsmail
CTRL-Z 將終止上述或其它任何命令。
grep 的最有用的選項(xiàng)可能是 -s。如果您以除根用戶之外的任何身份搜索系統(tǒng)文件,那么對于每一個您沒有訪問權(quán)限的文件,都將產(chǎn)生錯誤消息。這個命令禁止那些消息。
Fgrep(也以 grep -F 調(diào)用)只查找固定的字符串,而不是 grep 接收的正則表達(dá)式。而 egrep 接收包含更大范圍的特殊字符(如 “|”,它指示條件 OR 運(yùn)算符)的模式。
$ egrep 'Subject|mailto' *
【編輯推薦】