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

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

基本的 I/O 重定向

在了解重定向之前,需要先了解一下標(biāo)準(zhǔn)的輸入輸出,總的來說,所有的數(shù)據(jù)都有來源,也都應(yīng)該都重點(diǎn),默認(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

> 重定向符號(hào)在墓地文件不存在的時(shí)候會(huì)新建一個(gè),如果目的文件存在,目的文件的內(nèi)容會(huì)被覆蓋,原本的數(shù)據(jù)會(huì)丟失。

>> 附加到文件

program>>file 可以將 program 的標(biāo)準(zhǔn)輸出追加到 file 的結(jié)尾處。

如同 >,open or create 文件,但是 >> 會(huì)追加到文件的結(jié)尾而不是覆蓋原文件內(nèi)容。

以 | 符號(hào)建立管道

program1 | program2 可將 program 的標(biāo)準(zhǔn)輸出修改為 program2 的標(biāo)準(zhǔn)輸入。這樣做的好處是執(zhí)行速度較快,不會(huì)產(chǎn)生臨時(shí)文件。一般情況下,越復(fù)雜越強(qiáng)大的管道往往是高效的。

例如:tr -d ‘\r’ dos-file.txt | sort >Linux-file.txt 這條管道會(huì)先刪除輸入文件內(nèi)的回車符號(hào),在完成數(shù)據(jù)的排序之后,將結(jié)果輸出到目的文件。

r 是 translate 的簡(jiǎn)寫,通過這個(gè)單詞,你大概也能猜到它是干什么的了吧!沒錯(cuò),它可以用一個(gè)字符串來替換另一個(gè)字符串,或者可以完全除去一些字符。您也可以用它來除去重復(fù)字符。tr 用來從標(biāo)準(zhǔn)輸入中通過替換或刪除操作進(jìn)行字符轉(zhuǎn)換。tr 主要用于刪除文件中控制字符或進(jìn)行字符轉(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. 有時(shí)需要?jiǎng)h除文件中的 ^M,并代之以換行 tr -s "[\015]" "[\n]" < file 或 tr -s "[\r]" "[\n]" < file
  4. 大寫到小寫 cat a.txt |tr "[a-z]" "[A-Z]" >b.txt

各個(gè)選項(xiàng)的意義的:

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

tr 的行為模式

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

在使用 linux 的工具程序是,不妨將數(shù)據(jù)想想成誰管理的誰,未經(jīng)處理的水,流向凈水廠,經(jīng)過各種過濾器的處理,最后變成適合人類飲用的水??梢园?< 和 > 想象成數(shù)據(jù)的漏斗---- 數(shù)據(jù)會(huì)從大的一頭進(jìn)入,從小的一頭出來。

在構(gòu)造管道的時(shí)候,應(yīng)該試著讓每個(gè)階段的數(shù)據(jù)量變少,也就是說,吧會(huì)讓數(shù)據(jù)變少的命令放在前邊,為后面的命令提供搞笑的執(zhí)行效率。例如,shiyongsort 排序之前,先用 grep 找出相關(guān)的行,這樣可以讓 sort 少做些事。