重定向和管道

重定向和管道

今天一起來學習一下重定向的一些相關命令及用法:

我們都知道
程序=指令+數據 ,那么我們的數據的輸入(Input)和輸出(Output)是如何實現的呢?!跟小編君一起來看一下吧:

本博文小編君分成了四部分:1.重定向的講解 2.管道符的講解 3.涉及到的一些其他命令 4.練習題

一:重定向

重定向的本質是改變文件的默認位置,即換個地方存儲數據。

Linux給程序提供三種I/O設備(它們均來自終端),分別是:

1.標準輸入(STDIN) -0 默認接受來自鍵盤的輸入

2.標準輸出(STDOUT)-1 默認輸出到終端窗口

      3.標準錯誤(STDERR)-2 默認輸出到終端窗口

看一下這個命令:

cat > filea < fileb   : 將filed文件內容寫入filea

其中“< filename”是將filename的內容輸入到某處;

“> filename”是將內容重定向(導入)到某文件中。

執行命令的格式: 命令 操作符號 文件名

支持的操作符號包括:

> STDOUT(標準正確輸出)重定向到文件(1>的簡寫)

2> STDERR(標準錯誤輸出)重定向到文件

&> 把所有輸出重定向到文件(包括正確和錯誤的)

> 2>&1 Centos6之前的格式))

>”:文件內容會被覆蓋(例如:echo  djdf  >
filename;
若文件不存在時,則創建文件并導入內容;若文件已經存在并有內容時,覆蓋原有內容; 也可以用 > filename 直接創建信息)

>>:在文件原有內容基礎上,追加內容(文件不存在時,也創建。)

重定向和管道

為了防止誤操作,我們可以設置“set –C filename:(禁止將內容覆蓋已有文件,但可追加);但是我們在這個時候又想將里面的內容覆蓋,就用 “>| file”:(強制覆蓋);取消這種設置,用“set +C filename”: (允許覆蓋)

重定向和管道

>>”追加正確的輸出信息;

“2>>”追加錯誤的輸出信息;

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

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

&>”將正確和錯誤的信息都覆蓋重定向到文件

&>>”將正確和錯誤的信息都追加重定向到文件

例如:

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

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

重定向和管道

二:管道

管道(使用符號“|”表示)用來連接命令,其格式是:

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

即:將命令1的正確輸出結果發送給命令2使用,命令2的正確輸出結果發送到命令3使用,(錯誤輸出默認不能通過管道轉發,可利用 “2>&1 |”(之前的版本)或者
|&”(Centos 6 以后才有的)實現)

例: echo 1+3 |bc—>4(將“1+3”輸出給下一條命令bc進行計算)(bc是計算器,)

可結合其他命令實現

重定向和管道

三.涉及到的其他命令

tr(translate):轉換和刪除字符,其用法格式為: tr [option] set1 [set2]

選項:

-c C –complement:取字符集的補集(取反)

-d –delete:刪除所有屬于第一字符集的字符

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

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

如下圖所示:

重定向和管道

對應的字符

[:alnum:]:字母和數字

[:alpha:]:字母(包括大小寫)

[:cntrl:]:控制(非打?。┳址?span>

[:digit:]:數字

[:graph:]:圖形字符

[:lower:]:小寫字母

[:print:]:可打印字符

[:punct:]:標點符號

[:space:]:空白字符

     [:upper:]:大寫字母

            [:xdigit:]:十六進制字符

在這里總結一下目前知道的這些字符的用法:在tr命令里用時只需一個中括號,在引用或者正則表達式里用時需要再加一個中括號。

重定向和管道

例:

tr 可以結合重定向和管道一起使用:例:

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

tr d abc < /etc/fstab 刪除fstab文件中的所有abc中任意字符

cat filename| tr ‘a-z’ ‘A-Z’將filename的內容里所有小寫字母轉換成大寫字母顯示

重定向和管道

四:接下來做幾道習題練練手,加深一下印象,

1./etc/issue文件中的內容轉換為大寫后保存至/tmp/issue.out文件中

解:這里用到從/etc/issue里將內容導出(用< /etc/issue),然后用tr進行大小寫轉換,之后再將轉換后的內容重定向到/tmp/issue.out,而且/tmp/issue.out這個文件本來是不存在的,在重定向的過程中,將其創建并導入內容
  [root@localhost test]# cat /tmp/issue.out
cat: /tmp/issue.out: No such file or directory
[root@localhost test]# tr ‘a-z’ ‘A-Z’ > /tmp/issue.out < /etc/issue
[root@localhost test]# cat /tmp/issue.out 
\S
KERNEL \R ON AN \M

2、將當前系統登錄用戶的信息轉換為大寫后保存至/tmp/who.out文件中

重定向和管道

3、將/root/下文件列表,顯示成一行,并文件名之間用空格隔開

解:首先將/root/下的文件列表顯示出來,然后用tr將換行符轉換成空格就可以了

重定向和管道

4、計算1+2+3+..+99+100的總和(這是一道面試題)

解:首先先將1到100想辦法顯示出來,這里用echo 加大括號將變量分別顯示出來,然后用tr把空格轉換成+,最后傳給計算器進行計算,最后輸出運算結果。

重定向和管道

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

解:因為只要數字和空格,所以想辦法將其余的不是數字和空格的刪除,這里可以先用echo將字符串輸出,然后用到tr里的選項“-c”對不是空格和字符的進行反選,用“-d”將反選到的非數字和空格的刪除就OK。

重定向和管道

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

重定向和管道


經過以上幾個練習,對重定向和管道從了解到熟悉了吧,下去之后還可以多找些題練練手呦,這篇博客到這結束了,以后再寫一些供參考。

原創文章,作者:M.Sun,如若轉載,請注明出處:http://www.www58058.com/83667

(0)
M.SunM.Sun
上一篇 2017-08-04
下一篇 2017-08-05

相關推薦

  • 馬哥教育網絡19期+第十六周課程練習

    編譯安裝LNMP 一、安裝Nginx: 1、解決依賴關系 編譯安裝nginx需要事先需要安裝開發包組"Development Tools"和 "Development Libraries"。同時,還需要專門安裝pcre-devel包: # yum -y ins…

    Linux干貨 2016-08-22
  • 第六周總結VIM編輯器的使用并完成練習題

    第六周 總結VIM編輯器的使用并完成練習題 1. VIM是什么? VIM(Vi IMproved)是從vi發展出來的一個文本編輯器。 2.為什么要使用VIM? VIM有代碼補完,編譯以及錯誤跳轉等方便編程的功能,在程序員中廣泛使用。對于大多數的用戶來說,VIM有著比較陡峭的學習曲線,但是一旦掌握一些基本操作之后,能大幅度提高編輯效率。VIM是類Unix系統用…

    Linux干貨 2017-09-02
  • 初學Linux之 vim 文本編輯器

    vim 的模式切換;命令模式相關操作,拓展命令模式的相關操作;可視化和多窗口;定制vim的工作特性;vim幫助

    2017-12-31
  • GNU awk基礎

    awk介紹 awk:Aho, Weinberger, Kernighan,報告生成器,格式化文本輸出 有多種版本:New awk(nawk),GNU awk( gawk) gawk:模式掃描和處理語言 基本用法: awk [options] ‘program’ var=value file… awk [options] -f programfile var=…

    Linux干貨 2018-01-01
  • sed文本處理工具

    Sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉…

    Linux干貨 2017-12-02
欧美性久久久久