在了解重定向之前,需要先了解一下標準的輸入輸出,總的來說,所有的數(shù)據(jù)都有來源,也都應該都重點,默認的標準輸入輸出就是終端。
例如:
我們只是輸入 cat 命令,并不指定任何參數(shù),接著我們輸入 hello world,就是打印 helloworld 到終端。
所謂的 I/O 重定向就是通過與終端交互,或是在 shell 腳本里設置,重新安排從哪里輸入或者輸出到哪里。
使用 < 改變標準輸入
program<file 可將 program 的標準輸入修改為 file
tr
使用 > 改變標準輸出
program>file 可將 program 的標準輸出修改為 file
> 重定向符號在墓地文件不存在的時候會新建一個,如果目的文件存在,目的文件的內(nèi)容會被覆蓋,原本的數(shù)據(jù)會丟失。
以 >> 附加到文件
program>>file 可以將 program 的標準輸出追加到 file 的結(jié)尾處。
如同 >,open or create 文件,但是 >> 會追加到文件的結(jié)尾而不是覆蓋原文件內(nèi)容。
以 | 符號建立管道
program1 | program2 可將 program 的標準輸出修改為 program2 的標準輸入。這樣做的好處是執(zhí)行速度較快,不會產(chǎn)生臨時文件。一般情況下,越復雜越強大的管道往往是高效的。
例如:tr -d ‘\r’ dos-file.txt | sort >Linux-file.txt
這條管道會先刪除輸入文件內(nèi)的回車符號,在完成數(shù)據(jù)的排序之后,將結(jié)果輸出到目的文件。
r 是 translate 的簡寫,通過這個單詞,你大概也能猜到它是干什么的了吧!沒錯,它可以用一個字符串來替換另一個字符串,或者可以完全除去一些字符。您也可以用它來除去重復字符。tr 用來從標準輸入中通過替換或刪除操作進行字符轉(zhuǎn)換。tr 主要用于刪除文件中控制字符或進行字符轉(zhuǎn)換。
tr [options] cource-char-file replace-char-list
例如:
tr -s "[a-z]"<oops.txt>result.txttr -s "[\012]" < plan.txt 或 tr -s ["\n"] < plan.txt^M,并代之以換行 tr -s "[\015]" "[\n]" < file 或 tr -s "[\r]" "[\n]" < filecat a.txt |tr "[a-z]" "[A-Z]" >b.txtsource-char-list 的反義,tr 要轉(zhuǎn)換的字符編程位列在 source-char-list 中的字符,通常與選項 -d.-s 配合使用。source-char-list 里所列的字符,將其濃縮成一個。如同過濾器一般,自標準輸入讀取字符,再將結(jié)果寫到標準輸出,任何輸入字符只要出現(xiàn)在 source-char-list 中,就會置換成 replace-char-list 里相應的字符。
在使用 linux 的工具程序是,不妨將數(shù)據(jù)想想成誰管理的誰,未經(jīng)處理的水,流向凈水廠,經(jīng)過各種過濾器的處理,最后變成適合人類飲用的水??梢园?< 和 > 想象成數(shù)據(jù)的漏斗---- 數(shù)據(jù)會從大的一頭進入,從小的一頭出來。
在構造管道的時候,應該試著讓每個階段的數(shù)據(jù)量變少,也就是說,吧會讓數(shù)據(jù)變少的命令放在前邊,為后面的命令提供搞笑的執(zhí)行效率。例如,shiyongsort 排序之前,先用 grep 找出相關的行,這樣可以讓 sort 少做些事。