Linux 重定向、管道和 tr命令總給

描述:

       標準輸出(standard output)指的是命令執行所回傳的正確的信息

   標準輸出(standard error output)指的是命令執行失敗後所回傳的錯誤信息

    Linux 給程序提供三種I/O 設備

    標準輸入(STDIN )- 0 默認接受來自鍵盤的輸入,使用< 或者 <<

    標準輸出(STDOUT )- 1 默認輸出到終端窗口,默認是屏幕,使用> 或者 >>

    標準錯誤輸出(STDERR )- 2 默認輸出到終端窗口,默認是屏幕,使用2> 或者 2>>

              通過I/O 重定向可改變默認位置,可將正確的或者錯誤的信息輸出到屏幕或者文件裏,輸入的信息可從鍵盤或者文件中讀取

   程序是由指令+數據組成的,STDOUT 和STDERR 可以被重定向到文件

說明:         

          格式爲: 命令   操作符號   文件名

          1>   以覆蓋的方式將正確的數據輸出到指定的文件或者設備上

          1>>    以追加的方式將正確的數據輸出到指定的文件或者設備上

           2>      以覆蓋的方式將錯誤的數據輸出到指定的文件或者設備上

           2>>     以追加的方式將錯誤的數據輸出到指定的文件或者設備上

    &>  把所有輸出重定向到文件

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

        可通過# set -C:  禁止將內容覆蓋 已有文件, 但可追加,強制覆蓋:>|

        # set +C:  允許覆蓋

[root@localhost ~]# echo "a" > file1
[root@localhost ~]# cat file1
a
[root@localhost ~]# set -C
[root@localhost ~]# echo "123" >file1
bash: file1: cannot overwrite existing file
[root@localhost ~]# echo "123" >| file1
[root@localhost ~]# cat file1
123
[ping@localhost ~]$ find /home -name .bashrc > list_right 2> list_error
[ping@localhost ~]$ cat list_right 
/home/ping/.bashrc
[ping@localhost ~]$ cat list_error
find: `/home/user1': Permission denied


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

          COMMAND > /path/to/file.out 2> /path/to/error.out

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

          &> :覆蓋重定向

          &>> :追加重定向

         COMMAND > /path/to/file.out 2> &1  (順序很重要)

         COMMAND >> /path/to/file.out 2>> &1

         find /etc -name passwd 2> /dev/null

        ():合併多個程序的STDOUT

         ( cal 2010 ; cal 2011 ) > all.txt

[ping@localhost ~]$ find /home -name .bashrc 2&>1 list
[ping@localhost ~]$ find /home -name .bashrc &> list
[ping@localhost ~]$ cat list
find: `/home/user1': Permission denied
/home/ping/.bashrc

標準輸入(standard input): < 與 <<

將原來要由鍵盤輸入的數據改由文件內容來替代

使用< 來重定向標準輸入

使用“<< 終止詞”命令從鍵盤把多行重導向給STDIN

[root@localhost ~]# cat > catfile
testing
cat file test
[root@localhost ~]# cat > catfile < ~/.bashrc
[root@localhost ~]# ll catfile ~/.bashrc
-rw-r--r-- 1 root gentoo 235 Aug 11 03:22 catfile
-rw-r--r-- 1 root root   235 Jul 27  2016 /root/.bashr
[root@localhost ~]# cat > catfile << "eof"
> this is a test
> ok now stop
> eof
[root@localhost ~]# cat catfile
this is a test
ok now stop

管道命令:

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

    格式:命令1 | 命令2 | 命令3 | ...

     管道命令僅會處理standard output, 對於standard error output 會予以忽略

     管道命令必須要能夠接受來自前一個命令的數據成爲standard input 繼續處理才行

     stderr 默認不能通過管道轉發,可利用 2>&1  或 |& 實現

[root@localhost ~]# ls -al /etc | less
[root@localhost ~]# lss -al /etc | less


tr命令:

      轉換和刪除字符

      格式:tr [OPTION]... SET1 [SET2]

                -c 或——complerment :取字符集的補集

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

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

     -t 或--truncate-set1 :將第一個字符集對應字符轉化爲第二字符集對應的字符

示例:

1,將/etc/issue 文件中的內容轉換爲大寫後保存至/tmp/issue.out 文件中

[root@localhost tmp]# cat /etc/issue | tr 'a-z' 'A-Z' > /tmp/issue.out
[root@localhost tmp]# cat /tmp/issue.out 
CENTOS RELEASE 6.8 (FINAL)
KERNEL \R ON AN \M
TTY IS \L
HOSTNAME IS \N
TIME IS \T

2,PATH 變量每個目錄顯示在獨立的一行

[root@localhost ~]# echo $PATH | tr -s '\n'
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin


結束語:

      本篇內容是本人上課內容的總結和整理,若有錯誤或不足,請各位路過的達人多多指教。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章