重定向和管道

重定向和管道

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

我們都知道
程序=指令+數據 ,那么我們的數據的輸入(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 21:56
下一篇 2017-08-05 10:53

相關推薦

  • 文本處理工具

    一、文本處理工具的分類:     查看全部內容:more、less、cat、tac、rev     截取文件內容:head 、tail     抽取文件內容:cut     抽取關鍵字:grep、eg…

    Linux干貨 2016-08-08
  • 馬哥教育網絡班21期+第17周課程練習

    1、結合圖形描述LVS的工作原理; lvs是基于內核的虛擬主機用來做四層的負載均衡,工作在netfilter框架的INPUT鏈上,有四種模式,上圖為lvs-nat lvs-nat:有DNAT功能,支持端口映射,請求報文和響應報文都需要經過Director 請求過程:cip–>vip,Director,cip–>rip 響應…

    Linux干貨 2016-12-26
  • Linux 基礎(7)——文本處理工具

    cat  tac  rev  more  less           head  tail cut  paste  wc               &nbs…

    2017-07-29
  • 2016-10-17作業

    1 生產環境發現一臺服務器系統時間產生偏差,造成服務異常,請幫忙校正。 date命令查看系統時間,clock或者hwclock命令查看硬件時間, 將系統時間同步到硬件時間的方法hwclock -s   2 生產有一個數據同步腳本需要執行很長時間,怎樣做到無人值守,在管理工具退出的情況下,腳本依然能正常運行。在生產環境的中創建SCREEN會話,會話的…

    Linux干貨 2016-10-18
  • N25-第二周作業

    N25-第二周作業 博客作業 1、linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示 linux上處理目錄的常用命令: ls :列出目錄 cd :切換目錄 pwd:顯示當前工作路徑 mkdir:創建目錄 rm:刪除文件或目錄 rmdir:刪除空文件 mv:剪切、重命名文件、目錄 cp:復制文件或目錄 touch:創建空文件 ls:= li…

    Linux干貨 2017-02-08
  • 學習Linux的第一周 之screen

         1.來到馬哥的感想:      已經接觸Linux已經一周,在緊張的而又條理的學習當中,我學到了很多東西單說量我就很佩服自己,在大學的兩年當中已經快把自己學習新知識的渴望忘記了!來到馬哥這短短一周我感覺我真的長大了很多,我把手機王者榮耀卸載了。只想對自己說加油堅持下去?!?/p>

    Linux干貨 2017-07-16
欧美性久久久久