鍍金池/ 教程/ Linux/ shell 學(xué)習(xí)第五天---基本的I/O重定向
shell 學(xué)習(xí)四十五天---xargs
shell學(xué)習(xí)第三天
shell 學(xué)習(xí)十五天---join 連接字段
shell 學(xué)習(xí)第二天
shell 學(xué)習(xí)四十三天---臨時性文件的建立與使用
shell 學(xué)習(xí)第六天---小結(jié)
shell 學(xué)習(xí)三十三天---關(guān)于重定向
shell 學(xué)習(xí)二十九天---循環(huán)
shell 學(xué)習(xí)二十四天---提取開頭或結(jié)尾數(shù)行
shell 學(xué)習(xí)第十天---sed 查找與替換
shell 學(xué)習(xí)第十一天---sed 正則的精確控制
shell 學(xué)習(xí)三十天---break,continue,shift,getopts
shell 學(xué)習(xí)---小結(jié)
shell 學(xué)習(xí)三十一天---函數(shù)問題
shell 學(xué)習(xí)第四天---華麗的 printf 輸出
shell 學(xué)習(xí)三十五天---波浪號展開與通配符
shell 學(xué)習(xí)十九天---文本塊排序
shell 學(xué)習(xí)十二天---行與字符串
shell 學(xué)習(xí)二十一天---重新格式化段落
shell 學(xué)習(xí)十八天---文本排序
shell 學(xué)習(xí)十三天---sed 案例分析
shell 學(xué)習(xí)四十一天---列出文件 ls 和 od 命令
shell 學(xué)習(xí)十七天---awk 命令
shell 學(xué)習(xí)三十六天---命令替換
shell 學(xué)習(xí)十六天---join 練習(xí)
shell 學(xué)習(xí)三十二天---read 讀取一行
shell 學(xué)習(xí)二十二天---計算行數(shù),字?jǐn)?shù)以及字符數(shù)
shell 學(xué)習(xí)小總結(jié)---本章小結(jié)
shell 學(xué)習(xí)第八天---擴展正則表達(dá)式(ERE)
shell 學(xué)習(xí)四十二天---使用 touch 更新文件時間
shell 學(xué)習(xí)二十八天---case 語句
shell 學(xué)習(xí)三十九天---內(nèi)建命令
shell 學(xué)習(xí)第一天
shell 學(xué)習(xí)三十四天---printf 詳解
shell 學(xué)習(xí)二十六天---變量與算數(shù)
shell 學(xué)習(xí)三十八天---執(zhí)行順序和 eval
shell 學(xué)習(xí)四十四天---尋找文件
shell 學(xué)習(xí)二十五天---神器的管道符
shell 學(xué)習(xí)十四天---使用 cut 選定字段
shell 學(xué)習(xí)第五天---基本的I/O重定向
shell 學(xué)習(xí)四十天---awk 的驚人表現(xiàn)
shell 學(xué)習(xí)二十天---sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習(xí)二十三天---打印
shell 學(xué)習(xí)第九天---分組
shell 學(xué)習(xí)四十八天---文件校驗和匹配
shell 學(xué)習(xí)二十七天---退出狀態(tài)和 if 語句
shell 學(xué)習(xí)四十七天---文件比較 cmp,diff,patch
shell 學(xué)習(xí)第七天---基礎(chǔ)正則表達(dá)式(BRE)
shell 學(xué)習(xí)四十六天---文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習(xí)三十七天---引用
shell 學(xué)習(xí)小結(jié)

shell 學(xué)習(xí)第五天---基本的I/O重定向

在了解重定向之前,需要先了解一下標(biāo)準(zhǔn)的輸入輸出,總的來說,所有的數(shù)據(jù)都有來源,也都應(yīng)該都重點,默認(rèn)的標(biāo)準(zhǔn)輸入輸出就是終端。
例如:
我們只是輸入 cat 命令,并不指定任何參數(shù),接著我們輸入 hello world,就是打印 helloworld 到終端。
所謂的 I/O 重定向就是通過與終端交互,或是在 shell 腳本里設(shè)置,重新安排從哪里輸入或者輸出到哪里。

重定向與管道
使用<改變標(biāo)準(zhǔn)輸入
program<file 可將 program 的標(biāo)準(zhǔn)輸入修改為 file
tr
使用>改變標(biāo)準(zhǔn)輸出
program>file 可將 program 的標(biāo)準(zhǔn)輸出修改為 file
">"重定向符號在墓地文件不存在的時候會新建一個,如果目的文件存在,目的文件的內(nèi)容會被覆蓋,原本的數(shù)據(jù)會丟失。

以>>附加到文件
program>>file可以將 program 的標(biāo)準(zhǔn)輸出追加到 file 的結(jié)尾處。
如同>,open or create 文件,但是>>會追加到文件的結(jié)尾而不是覆蓋原文件內(nèi)容。
以 | 符號建立管道
program1 | program2可將 program 的標(biāo)準(zhǔn)輸出修改為 program2 的標(biāo)準(zhǔn)輸入。這樣做的好處是執(zhí)行速度較快,不會產(chǎn)生臨時文件。一般情況下,越復(fù)雜越強大的管道往往是高效的。
例如: tr -d ‘\r’ dos-file.txt | sort >Linux-file.txt
這條管道會先刪除輸入文件內(nèi)的回車符號,在完成數(shù)據(jù)的排序之后,將結(jié)果輸出到目的文件。

r 是 translate 的簡寫,通過這個單詞,你大概也能猜到它是干什么的了吧!沒錯,它可以用一個字符串來替換另一個字符串,或者可以完全除去一些字符。您也可以用它來除去重復(fù)字符。
tr 用來從標(biāo)準(zhǔn)輸入中通過替換或刪除操作進行字符轉(zhuǎn)換。tr 主要用于刪除文件中控制字符或進行字符轉(zhuǎn)換。
tr [options] cource-char-file replace-char-list
例如:
(1)去除 oops.txt 里面的重復(fù)的小寫字符
tr -s "[a-z]"<oops.txt >result.txt
(2)刪除空行
tr -s "[\012]" < plan.txt 或tr -s ["\n"] < plan.txt
(3)有時需要刪除文件中的^M,并代之以換行
tr -s "[\015]" "[\n]" < file 或tr -s "[\r]" "[\n]" < file
(4)大寫到小寫
cat a.txt |tr "[a-z]" "[A-Z]" >b.txt

各個選項的意義的:
-c:取 source-char-list 的反義,tr 要轉(zhuǎn)換的字符編程位列在 source-char-list 中的字符,通常與選項-d,-s 配合使用。
-d:刪除標(biāo)準(zhǔn)輸入里的字符,不是轉(zhuǎn)換他
-s:產(chǎn)出重復(fù)的字符,如果標(biāo)準(zhǔn)輸入里出現(xiàn)了重復(fù)多次的 source-char-list 里所列的字符,將其濃縮成一個。

tr 的行為模式
如同過濾器一般,自標(biāo)準(zhǔn)輸入讀取字符,再將結(jié)果寫到標(biāo)準(zhǔn)輸出,任何輸入字符只要出現(xiàn)在 source-char-list 中,就會置換成 replace-char-list 里相應(yīng)的字符。

在使用 linux 的工具程序是,不妨將數(shù)據(jù)想想成誰管理的誰,未經(jīng)處理的水,流向凈水廠,經(jīng)過各種過濾器的處理,最后變成適合人類飲用的水??梢园?lt;和>想象成數(shù)據(jù)的漏斗----數(shù)據(jù)會從大的一頭進入,從小的一頭出來。
在構(gòu)造管道的時候,應(yīng)該試著讓每個階段的數(shù)據(jù)量變少,也就是說,吧會讓數(shù)據(jù)變少的命令放在前邊,為后面的命令提供搞笑的執(zhí)行效率。例如,shiyongsort 排序之前,先用 grep 找出相關(guān)的行,這樣可以讓 sort 少做些事。