1. 程式人生 > >2.2-IO重定向,管道及文本處理工具

2.2-IO重定向,管道及文本處理工具

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重定向,管道及文本處理工具