重定向和管道
今天一起來學習一下重定向的一些相關命令及用法:
我們都知道
程序=指令+數據 ,那么我們的數據的輸入(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