1. 程式人生 > >Linux下的I/O與管道

Linux下的I/O與管道

sem pat 一行 處理 ces 刪除字符 .... 字符集 /etc/

閱讀目錄

  • 1. 標準輸入輸出

  • 2.輸入輸出重定向

  • 3.tr命令

  • 4. 管道和tee

  • 5.練習




1、標準輸入輸出

(1)linux 給程序提供三種I/O設備

標準輸入 :(STDIN) — 0 默認接受來自鍵盤的輸入

標準輸出 :(STDOUT) — 1 默認輸出到終端窗口

標準錯誤 :(STDEER) — 2 默認輸出到終端窗口


(2)輸入設備有:鍵盤、鼠標、掃描儀、攝像頭等

輸出設備有:打印機、顯示器、投影儀等


2、輸入輸出重定向

〉正確輸出

2〉錯誤輸出

&〉全部輸出(覆蓋重定向)

>文件內容會被覆蓋

set -C :禁止將內容覆蓋已有文件,但可追加

>| file :強制覆蓋

set +C 允許覆蓋

>> 原有內容基礎上,追加內容

文件不存在時,>和>> 都能創建新文件,文件已存在時 >表示覆蓋,>>表示追加

2>&1 把錯誤的結果轉成正確的結果

1>&2 把正確的結果轉成錯誤的結果

():合並多個程序的STDOUT

cal 2007;cal 2008

(cal 2007 ; cal 2008 ) >all.txt

** 3、tr命令

tr 轉換和刪除字符

tr [OPTION] ....SET1[SET2]


選項:

-c -C --complement:取字符集的補集

-d --delete:刪除所有屬於第一個字符集的字符

技術分享圖片

-s --squeeze-repeats:把連續重復的字符以單獨的一個字符表示

技術分享圖片

-t --truncate-set1:將第一個字符集對應字符轉換為第二字符集對應的字符

技術分享圖片

從文件中導入STDIN

(1) 使用<來重定向標準輸入

(2)某些命令能夠接受從文件中導入的STDIN

Tr a-z A-Z< /etc/issue 該命令會把/etc/issue中的小寫字符都轉換成大寫字符

技術分享圖片

3) tr -d abc < /etc/fstab

刪除fstab文件中的所有abc中任意字符

(4) cat > file

Mage

wangxiaochun

按ctrl+d離開,可以使用文件來代替鍵盤的輸入


使用“<<終止詞”把多行重導向給STDIN

技術分享圖片


4、管道和tee

使用符號“|”表示,用來連接命令

命令1 | 命令2 | 命令3 ...

組合多種工具的功能:

ls | tr `a-z` `A-Z`

less : 一頁一頁的查看輸入 ls -l /etc | less

mail :通電子郵件發送輸入 echo "test email" | mail -s "test" [email protected]


tee:從標準輸入讀取,寫入到標準輸出,並保存到文件中

技術分享圖片


5、練習

1、計算1+2+3+..+99+100的總和

echo 1+2|bc echo {1..100} echo {1...100} |tr " "+|bc

2、 一個linux用戶給root發郵件,要求郵件標題為”help”,郵件正文如下:Hello, I am 用戶名,The system version is here,please help me to check it ,thanks操作系統版本信息

echo -e Hello,I am `whoami`,The system version is here,Please help me to check it,Thanks."\n"`cat /etc/redhat-release` | mail -s help root

3、將當前系統登錄用戶的信息轉換為大寫後保存至/tmp/who.out文件中
who | tr [a-z] [A-Z] > /tmp/who.out

4、將/etc/issue文件中的內容轉換為大寫後保存至/tmp/issue.out文件中

cat /etc/issue |tr a-z A-Z > /tmp/issue.out

6、處理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的數字和空格

echo "xt.,l 1 jr#hat-releasemn 2 c*/fe 3 uz 4" | tr -cd [:digit:][:blank:]

7、將PATH變量每個目錄顯示在獨立的一行

echo $PATH |tr : "\n"

















Linux下的I/O與管道