• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            重定向與管道

            Posted on 2010-01-06 19:20 S.l.e!ep.¢% 閱讀(423) 評論(0)  編輯 收藏 引用 所屬分類: C++

            重定向與管道

            重定向

            Linux shell接收或發送徐磊和字符串流行是的輸入或輸出,不管實際的字符串流進入或來自哪個文件、鍵盤、顯示窗口等設備,都使用文件I/O技術來訪問流。Linux shell使用3種標準的I/O流,每種流都與一個文件描述符相關:
            1.stdout是標準輸出流,顯示來自命令的輸出,文件描述符為1
            2.stderr是標準錯誤流,顯示來自命令的錯誤輸出,文件描述符為2
            3.stdin是標準輸入流,為命令提供輸入,文件描述符為0

            重定向輸出:
            >??????????? 輸出重定向到一個文件或設備,覆蓋原來的文件
            >!?????????? 輸出重定向到一個文件或設備,強制覆蓋原來的文件
            >>????????? 輸出重定向到一個文件或設備,追加原來的文件
            n>????????? 標準輸出/標準錯誤重定向到一個文件或者設備,覆蓋原來文件(1為默認)
            n>>??????? 標準輸出/標準錯誤重定向到一個文件或者設備,追加原來的文件(1為默認)
            m>&n??? 標準輸出/標準錯誤重定向到標準錯誤輸出/標準錯誤
            m>>&n
            &>???????? 將標準輸出和標準錯誤重定向到同一個文件中
            &>>
            注意:
            1.以下兩個指令:
            command 2>&1 1>output.txt
            command 1>output.txt 2>&1
            這個指令是不一樣的,第一種情況中,stderr被重定向到stdout的當前位置,然后再將stdout重定向到output.txt,但1>output.txt只影響stdout,不影響stderr。第二種情況中,stderr被重定向到stdout的當前位置,即output.txt中。
            2.可以將選擇的流重定向到空文件/dev/null,這樣相當于完全忽略所選的標準流。使用cat命令顯示/dev/null是空的。

            重定向輸入:
            <??????? 輸入重定向到一個程序,如tr ' ' '\n' < text
            0<????? 標準輸入重定向
            注意:
            1.輸入重定向與管道是可以互換的,例如cat file | tr ' ' '\t'使用管道命令將cat指令的標準輸出果作為tr指令的標準輸入,可以寫成tr ' ' '\t' < file。
            2.shell存在here-document的概念,這是另一種輸入重定向的形式,它將<<和一個單詞結合構成一個標記,用來表示輸入端結束符,例如:
            sort -n << END
            該指令接收來自標準輸入端的字符,直到END為止,然后sort排序。當然也可以使用sort -n以及CTRL+D來代替。

            管道

            1.在兩個命令之間使用管道|操作符將前一個命令的stdout指向第二個命令的stdin,可以通過添加更多的命令和管道操作符來構造更長的管道線。使用管道操作符后,可以使用連字符-取代文件名作為一個參數,用于表述輸入來自stdin而不是文件。
            2.需要注意,管道線僅將stdout導向stdin,不能使用2|這樣的形式單獨到處stderr,但是可以先將stderr重定向到stdout,然后使用管道命令,例如ls y* x* z* 2>&1 | sort。
            3.管道不涉及到中間文件,第一個命令的stdout沒有寫到一個文件中,然后再由第二個命令讀取(相當于重定向的寫法),例如bunzip2 -c somefile.tar.bz2 | tar -xvf -命令。

            與管道相關的一些指令

            cut -d "分割字符" [-cf] fields file
            ???????? //使用某分隔符分割并列出要求的區域
            -d??? 后面接的是分割字符,默認是空格符
            -c??? 后面接的是第幾個字符
            -f??? 后面接的是第幾個區塊
            例子:
            cat /etc/passwd | cut -d ":" -f 1
            將passwd文件中每一行里的":"用作分隔符,列出第一個區塊。
            last | cut -d " " -f 1
            以空格作為分隔,并列出第一個區塊。

            sort [-t 分隔符] [(+起始)(-結束)] [-nru] file?????? //排序
            -t???? 分隔符,用來隔開不同的區塊,默認是TAB
            -n??? 使用純數字排序(默認以字母方式排序)
            -r??? 反向排序
            -u??? 相同出現的一行,只列出一次
            +start -end??? 由第start區塊排序到第end區塊

            wc [-lmw] file
            -l????? 計算有多少行
            -m??? 計算有多少字符
            -w??? 計算有多少字
            wc用于統計,例如要知道目前帳號文件里有多少帳號,就是用wc -l,因為/etc/passwd里一行代表一個用戶,即:cat /etc/passwd | wc -l。

            uniq [-cdu] inputfile [outputfile]????????? //默認用來顯示所有的行一次
            -c??? 用于計算每行出現的次數
            -d??? 只打印不重復的行
            -u??? 只打印重復的行
            例如:
            last | cut -d " " -f 1 | sort | uniq

            tee file
            tee命令將數據同時顯示在屏幕上和文件中,使用方式如下:
            last | tee file | cut -d " " -f 1
            last的輸出數據傳入file中,也會同時傳給stdout。

            tr [-ds] SET1 [SET2]??????????????? //從標準輸入中翻譯、刪除字符串,并寫到標準輸出中
            -d??? 刪除SET1這個字符串
            -s??? 對SET1出現的字符,當連續出現時僅打印一次
            例如:
            cat /etc/passwd | tr -d :
            這個命令會刪除':'這個符號并顯示輸出。
            last | tr '[a-z]' '[A-Z]'
            這個命令將小寫改成大寫,取代原有的字符。

            split [-bl num] 輸入文件 輸出文件前導字符
            -b??? 以文件size來分
            -l??? 以行數來分
            該指令將某文件內容分割成幾個子文件,子文件名字為前導字符+aa、ab、ac等,使用-l指定每個文件的行數,使用-b指定每個文件的大小。
            例子:
            split -l 5 /etc/passwd test??? //產生testaa、testab等文件。

            伊人久久一区二区三区无码| 99久久99这里只有免费费精品| 久久亚洲AV成人无码电影| 久久精品视频一| 少妇内射兰兰久久| 久久久久久亚洲AV无码专区| 国产综合久久久久| 久久精品毛片免费观看| 日产精品99久久久久久| 囯产极品美女高潮无套久久久| 日日躁夜夜躁狠狠久久AV| 精品国产乱码久久久久久人妻| 国产综合久久久久| 99久久99久久久精品齐齐| 色综合合久久天天综合绕视看| 久久99久久无码毛片一区二区| 97久久婷婷五月综合色d啪蜜芽 | 香港aa三级久久三级| 久久综合精品国产一区二区三区| 亚洲欧美久久久久9999 | 亚洲愉拍99热成人精品热久久 | 99久久精品久久久久久清纯| 国产精品成人99久久久久| 久久久久久久波多野结衣高潮| 亚洲精品乱码久久久久久久久久久久| 色偷偷偷久久伊人大杳蕉| 国内精品久久久久| 久久婷婷五月综合97色| 亚洲伊人久久大香线蕉苏妲己| 久久综合九色欧美综合狠狠| 久久成人国产精品免费软件| 久久精品国产影库免费看| 香蕉99久久国产综合精品宅男自| 国产精品久久久久久| 麻豆久久| 久久精品国产91久久综合麻豆自制 | 国产精品青草久久久久福利99| 99久久做夜夜爱天天做精品| 青春久久| 夜夜亚洲天天久久| 一本久久a久久精品vr综合|