輸入輸出重定向及管道

Linux運維之路 基礎篇:Linux基礎命令(二) 輸入輸出重定向及管道

標準輸入:用0表示(鍵盤)
標準輸出:用1表示(監視器)
標準錯誤輸出:用2表示(監視器)

IO重定向:改變標準位置

標準輸出重定向:

>:覆蓋重定向,目標文件原有的內容會被清除(set -C:禁止對已有文件進行覆蓋重定  向)
 (>|:強制進行覆蓋重定向)
>>:追加重定向,目標文件原有的內容會被保留,新內容追加至結尾

標準錯誤輸出重定向:

2>:標準錯誤輸出覆蓋重定向
2>>:標準錯誤輸出追加重定向

標準輸出和錯誤輸出各自定向至不同位置

命令 > 位置1 2> 位置2 (兩個文件都會被創建)

合併標準輸出和錯誤輸出爲同一個數據流進行重定向

命令 &> 文件或目錄 或 命令 > 目錄或文件 2>&1

輸入重定向:符號 <

tr命令: tr [OPTION]... SET1 [SET2]
不加選項表示將字符1中的字符替換到位置與之對應的字符2中的數據
tr "a-z" "A-Z" 把小寫字母轉換爲大寫字母
加特定選項-d,將數據中的和字符1中的數據匹配到的刪除
-c或——complerment:取代所有不屬於第一字符集的字符
-s或--squeeze-repeats:把連續重複的字符以單獨一個字符表示;
-t例如:--all例如:--all或--truncate-set1:先刪除第一字符集較第二字符集多出的字符。

tr [OPTION]... SET1 [SET2] < 文件 表示從給定的文件中讀取內容
<< 結束符:將結束符之前的內容合併輸出
用處: cat >>/tmp/tese <<EOF 可以向指定文件中寫多行內容

[root@weiying ~]# cat &lt;&lt;EOF
my name is root
my version is `lsb_release -d`
EOF
my name is root
my version is Description:  CentOS Linux release 7.4.1708 (Core) 

管道

把前一個命令的輸出當做後一個命令的輸入(最後一個命令會在當前shell進程的子進程中執行),標準錯誤輸出默認不能通過管道轉發,可利用2>&1 或 |& 實現

tee命令:從標準輸入讀取數據,輸出至標準輸出和文件中

-a:追加

例:將/etc/passwd文件前五行,轉換爲大寫後,保存至/tmp/passwd中

head -n 5 | tr "a-z" "A-Z" | tee /tmp/passwd

練習:

  1. 將/etc/issue文件中的內容轉換爲大寫後保存至/tmp/issue.out文件中
    [root@weiying ~]# tr [:lowwer:] [:upper:] < /etc/issue > /tmp/issue.out
  2. 將當前系統登錄用戶的信息轉換爲大寫後保存至/tmp/who.out文件中
    [root@weiying ~]# who | tr 'a-z' 'A-Z' > /tmp/who.out
  3. 一個linux用戶給root發郵件,要求郵件標題爲”help”,郵件正文如下:
    Hello, I am 用戶名,The system version is here,please help me to check it ,thanks!操作系統版本信息
    [root@weiying ~]# mail -s "HELP" root <<EOF
    > Hello:
    > I am `whoami`
    > zhe system version is `lsb_release -d`
    > plesas help me to check it 
    > thanks
    > `cat /etc/redhat-release`
    > EOF
  4. 將/root下文件列表,顯示成一行,並文件名之間用空格隔開
    [root@weiying ~]# ls /root | tr '\n' ' '
  5. 計算1+2+3+..+99+100的總和
    [root@weiying ~]# echo {1..100}| tr ' ' '+'|bc
  6. 刪除Windows文本文件中的回車字符 ,即“\r”
    [root@weiying ~]# tr -d '\t' < win.txt
  7. 處理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的數字和空格
    [root@weiying ~]# echo "xt.,l 1 jr#hexdumpmn 2 c*/fe 3 uz 4" | tr -d -c '0-9 " "'
  8. 將PATH變量每個目錄顯示在獨立的一行
    [root@weiying ~]# echo $PATH | tr ":" "\n"
  9. 將指定文件中0-9分別替代成a-j
    [root@weiying ~]# tr '0-9' 'a-j' < test
  10. 將文件/etc/centos-release中每個單詞(由字母組成)顯示在獨立一行,並無空行
    [root@weiying ~]# cat /etc/centos-release | tr -sc '[:alpha:]' '\n'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章