1. 輸出重定向
Linux默認輸入是鍵盤,輸出是顯示器。可以用重定向來改變這些設置。比如用wc命令的時候本來是要手動輸入一篇文字來計算字符數的,可以直接把一個已經寫好的文件用‘<’指向這條命令,就直接可以統計這個文件的字符數等了。
STDOUT(標準輸出)和STDERR(標準錯誤)可以被重定向到文件
命令 操作符號 文件名
支持的操作符號包括:
> 把STDOUT重定向到文件
如圖,etc下有passwd文件,app下沒有passwd文件,將他們兩個重定向導出到文件ls.txt中,回車之后只剩下錯誤的那條。然后我們查看ls.txt文件,發現正確的標準輸出在里面
2> 把STDERR重定向到文件
同樣,使用2>則將正確的顯示出來,將錯誤輸出到ls.txt文件了。
&> 把所有輸出重定向到文件(或者> 2>&1也可以)
如圖,兩種方法將正確錯誤都輸入進文件了
值得注意的是,使用> 會默認將文件內容覆蓋。
使用set -C 禁止將內容覆蓋已有文件,但可追加
>> 在原有內容的基礎上,追加內容
>|
file 強制覆蓋
set +C 允許覆蓋
也可以一次分別將輸出和錯誤各自定向至不同位置
如圖,分別定向到right.txt和error.txt文件中。
2.tr轉換和刪除
tr
[OPTION]… SET1 [SET2]
(先輸入條件,之后回車可以輸入要想轉換的內容,輸入一行輸出一行,直到Ctrl+C退出)
也可以使用重定向功能,不需要輸入,直接輸入一個文件,就可以被替換了
如圖,不需要將.bashrc的內容重新打一遍,就可以輸出了.bashrc內容。(這種操作不會改變.bashrc的內容。)
-c –C
–complement 取字符集的補集(就是不刪除什么)
如圖,將除了c以外的字符都換成a
-d –delete 刪除所有屬于第一字符集的字符
如圖,將文件中所有的abc都刪除了
-s –squeeze-repeats 把連續重復的字符刪除成一個字符
如圖,將重復的abc變成一個,其余重復的字母不動。
-t –truncate-set1 將第一個字符集對應字符轉化為第二字符集
對應的字符:
[:alnum:]:字母和數字
[:alpha:]:字母
[:cntrl:]:控制(非打?。┳址?/span>
[:digit:]:數字
[:graph:]:圖形字符
[:lower:]:小寫字母
[:print:]:可打印字符
[:punct:]:標點符號
[:space:]:空白字符
[:upper:]:大寫字母
[:xdigit:]:十六進制字符
3.從文件中導入STDIN
同樣的,我們可以使用<來重定向標準輸入STDIN
某些命令能夠接受從文件中導入的STDIN
tr ‘a-z’ ‘A-Z’< /etc/issue 該命令會把/etc/issue中的小寫字符都轉換成大寫字符
tr –d abc < /etc/fstab 該命令可以刪除fstab文件中的所有abc中任意字符(這兩個功能上面已經使用過了)
cat
> file 可以寫入內容到文件中
按ctrl+d或者 ctrl+c離開,可以使用文件來代替鍵盤的輸入
<< 終止詞
可以隨意編輯,直到某一行只有那個終止詞,將退出編輯,將上面的內容都發送給文件。
如圖,直到最后一行為!時,自動退出。
Cat >
filea < fileb
如圖,將text.txt中的內容寫入到file.txt中
同樣,我們也可以通過這種方式導入文件到郵件里并發送。
(發送郵件的代碼為 mail -s “郵件名” 想要發送給的用戶,然后輸入內容后使用Ctrl+d退出)
現在我們將text.txt這個文件寫入郵件并發送:
如圖,登陸magedu用戶,輸入mail查看郵件,發現收到了這封內容是text.txt的信。(看完之后輸入quit退出)
4.管道
管道(使用符號“|”表示)用來連接命令
如圖,將1+2傳給計算器,得出結果
命令1 | 命令2 | 命令3 | … 將命令1的STDOUT發送給命令2的STDIN,命令2的STDOUT發送到命令3的STDIN。
如圖,將|與tr結合使用,將所有重復的空格變成一個空格。
然后繼續使用|和grep命令(這個命令以后會講到)查詢/boot那行
| 只能將正確結果重定向給下一條命令
使用 2>&1 | 或 |& 可以將全部結果重定向
5.重定向到多個目標tee
命令1 | tee [-a ] 文件名 | 命令2
把命令1的STDOUT保存在文件中,做為命令2的輸入
-a 追加
使用:
保存不同階段的輸出
復雜管道的故障排除
同時查看和記錄輸出
原創文章,作者:T_endless,如若轉載,請注明出處:http://www.www58058.com/81864