2.2-IO重定向,管道及文本處理工具
bash的IO重定向及管道
程序:指令+數據(數據結構+算法)
讀入數據:input
輸出數據:output
打開的文件都有一個fd:file descriptor(文件描述符)
標準輸入:keyborad,0
標準輸出:monitor,1
標準錯誤輸出:monitor,2
I/O重定向:改變標準位置
輸出重定向:COMMAND > NEW_POS,COMMAND >> NEW_POS
>:覆蓋重定向,目標文件中的原有內容會被清除
>>:追加重定向,將原文件中的內容追加到目標文件末尾
# set -C:禁止將內容覆蓋輸出至已有文件中
強制覆蓋:>|
# set +C:取消禁止將內容覆蓋輸出至已有文件中
2>:覆蓋重定向錯誤輸出數據流
2>>:追加重定向錯誤輸出數據流
標準輸出和錯誤輸出各自定向至不同位置
COMMAND > /path/to/file.suc 2>/path/to/file.err
合並標準輸出和錯誤輸出為同一個數據流進行重定向
&>:覆蓋重定向
&>>:追加重定向
COMMAND > /path/to/file 2>&1 :將錯誤輸出覆蓋重定向至/path/to/file中
COMMAND >> /path/to/file 2>>&1
輸入重定向:<
tr命令:轉換或刪除字符
tr [OPTION]... SET1 [SET2]
tr abc ABC < /etc/fstab :以/etc/fstab作為輸入,並將其輸入數據流中小寫abc替換為大寫ABC
HERE Documentation:<<
(1)cat << EOF
>1111111
>2222222
>EOF
(2)cat >>/tmp/test<<EOF
>
追加或覆蓋輸入內容至/tmp/test中
管道:前一個命令的結果當做後一個命令的輸入
COMMAND1 | COMMAND2 | COMMAND3|......
Note:最後一個命令會在當前shell進程的子shell進程中執行
tee:
tee [OPTION]... [FILE]...
# tee 1.out
123
123
456
456
^C
# cat 1.out
123
456
#
一路輸入,兩路輸出
文本處理工具:wc,cut,sort,uniq
wc命令:
wc [OPTION]... [FILE]...
wc -l 文件名 行數
wc -c 文件名 字節數 set list顯示換行符
wc -w 文件名 連續到字符串(單詞)
cat -n /etc/passwd | head -20 | tail -2 | rev | tac (rev 左右顛倒 tac顛倒)
cut命令:
cut [OPTION]... [FILE]...
-d DELIMITER:指明分隔符
-f FILEDS:
#:第#個字段
#,#[,#]:離散的多個字段:例如1,3,6
#-#:連續的多個字段:例如1-6
1-3,7:混合使用
--output-delimiter=STRING:指明分隔的字段
cut -d: -f1 /etc/passwd | head -5
cut -d: -f1,3,5 /etc/passwd | head -5
cut -d: -f1-3 /etc/passwd | head -5
cut -c 1 /etc/passwd | head -5
cut -c 1,2,3 /etc/passwd | head -5
cut -c 1-4 /etc/passwd | head -5
cut -d: -f1-3 --output-delimiter=‘ ‘ /etc/passwd
sort命令:排序
sort [OPTION]... [FILE]...
sort 默認按首字符排序
sort -n 按數值大小排序
sort -u (uniq)去掉重復行
sort -r 降序排序
sort -f 忽略字符大小寫
sort -t DELIMITER:字段分隔符
sort -k #:以#字段為標準排序
uniq命令:默認去掉連續且完全相同的行
uniq [OPTION]... [FILE]...
uniq -d 顯示重復行
uniq -u 顯示不重復行
uniq -c 統計重復次數
練習:以冒號分隔,取出/etc/passwd文件的第6至第10行,並將這些信息按第3個字段的數值大小進行排序,最後僅顯示各自的第一個字段。
# sed -n ‘6,10p‘ /etc/passwd | sort -t: -k3 | cut -d: -f1
2.2-IO重定向,管道及文本處理工具