1. 程式人生 > >IO重定向和管道用法

IO重定向和管道用法

STDOUT和STDERR可以被重定向到檔案
命令 操作符號 檔名
支援的操作符號包括:

把STDOUT重定向到檔案
2> 把STDERR重定向到檔案
&> 把所有輸出重定向到檔案
檔案內容會被覆蓋
set –C 禁止將內容覆蓋已有檔案,但可追加
| file 強制覆蓋
set +C 允許覆蓋
> 原有內容基礎上,追加內容
2> 覆蓋重定向錯誤輸出資料流
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
():合併多個程式的STDOUT
( cal 2007 ; cal 2008 ) > all.txt

tr 轉換和刪除字元
tr [OPTION]... SET1 [SET2]
選項:
-c –C --complement:取字符集的補集
-d --delete:刪除所有屬於第一字符集的字元
-s --squeeze-repeats:把連續重複的字元以單獨一個字元表示
-t --truncate-set1:將第一個字符集對應字元轉化為第二字符集對應的字元
使用<來重定向標準輸入
某些命令能夠接受從檔案中匯入的STDIN
tr ‘a-z’ ‘A-Z’< /etc/issue
該命令會把/etc/issue中的小寫字元都轉換成大寫字元
tr –d abc < /etc/fstab
刪除fstab檔案中的所有abc中任意字元
cat > file
mage
wangxiaochun
按ctrl+d離開,可以使用檔案來代替鍵盤的輸入
cat < file1 > file2
Cat < file1 >> file1

管道(使用符號“|”表示)用來連線命令
命令1 | 命令2 | 命令3 | …
將命令1的STDOUT傳送給命令2的STDIN,命令2的STDOUT傳送到命令3的
STDIN
STDERR預設不能通過管道轉發,可利用2>&1 或 |& 實現
最後一個命令會在當前shell程序的子shell程序中執行
組合多種工具的功能
ls | tr ‘a-z’ ‘A-Z’

less :一頁一頁地檢視輸入
ls -l /etc | less
mail: 通過電子郵件傳送輸入
echo "test email" | mail -s "test" [email protected]
lpr:把輸入傳送給印表機
echo "test print" | lpr -P printer_name

將 /home 裡面的檔案打包,但打包的資料不是記錄到檔案,而是傳送到 stdout,
經過管道後,將 tar -cvf - /home 傳送給後面的 tar -xvf - , 後面的這個 - 則是取
前一個命令的 stdout, 因此,就不需要使用臨時file了
tar -cvf - /home | tar -xvf -

命令1 | tee [-a ] 檔名 | 命令2
把命令1的STDOUT儲存在檔案中,做為命令2的輸入
-a 追加
使用:
儲存不同階段的輸出
複雜管道的故障排除
同時檢視和記錄輸出