Linux入門-7 Linux管道、重定向以及文本處理
阿新 • • 發佈:2018-02-11
cas tde blog linux中 err linuxcast 重要 nal new
Linux管道、重定向以及文本處理
- 1 Linux多命令協作:管道及重定向
- 管道和重定向
- 2 Linux命令行文本處理工具
- 文件瀏覽
- 基於關鍵字搜索-grep
- 基於列處理文本-cut
- 文本統計-wc
- 文本排序-sort
- 刪除重復行
- 文本比較-diff
- 檢查拼寫-aspell
- 處理文本內容-tr
- 搜索替換-sed
開源的一個重要理念:不要重復發明輪子。
很多開源軟件都是現有軟件、代碼、功能的重新組合。
《大教堂與集市》
1 Linux多命令協作:管道及重定向
管道和重定向
Linux中,大多數命令都很簡單,往往只實現一個或幾個簡單的功能,我們可以將不同功能的命令組合在一起使用,以達到完成某個復雜功能的目的。
Linux中,幾乎所有命令的返回都是純文本的,而純文本形式的數據是絕大多數命令的輸入格式,這就讓協作成為可能。
Linux的命令行為我們提供了管道和重定向機制,多命令協作就是通過管道和重定向完成的。
- 命令行shell數據流有以下定義:
名稱 | 說明 | 編號 | 默認 |
---|---|---|---|
STDIN | 標準輸入 | 0 | 鍵盤 |
STDOUT | 標準輸出 | 1 | 終端 |
STDERR | 標準錯誤 | 2 | 終端 |
命令通過STDIN接收參數或數據,通過STDOUT輸出結果或通過STDERR輸出錯誤。
- 通過管道和重定向可以控制CLI的數據流
- 管道通常用來組合不同的命令,以實現更復雜的功能
- 重定向通常用來保存命令的輸出或錯誤信息
分類 | 關鍵字 | 定義 | 例子 |
---|---|---|---|
重定向 | > |
將STDOUT重定向到文件(覆蓋) | echo "linuxcast.net" > outfile |
重定向 | >> |
將STDOUT重定向到文件(追加) | echo "linuxcast.net" >> outfile |
重定向 | 2> |
將STDERR重定向到文件(覆蓋) | echo "linuxcast.net" 2> outfile |
重定向 | 2>&1 |
將STDERR與STDOUT結合 | echo "linuxcast.net" 2>&1 outfile |
重定向 | < |
STDIN | grep linuxcast < /etc/passwd |
管道 | | |
將一個命令的STDOUT作為另一個命令的STDIN | ls -l | grep linuxcast |
一個更復雜的例子:查找用戶linuxcast的Video文件,將查找錯誤重定向到null(丟棄)
find / -user linuxcast 2> /dev/null | grep Video
2 Linux命令行文本處理工具
文件瀏覽
cat/more/less/head/tail
基於關鍵字搜索-grep
該命令使用正則表達式搜索指定的純文本文件或純文本(管道)
-i
忽略大小寫-n
現實結果所在行數(文件)-v
輸出不帶關鍵字的行(反選)-Ax
輸出的時候包含結果所在行之後的指定行數-Bx
輸出的時候包含結果所在行之前的指定行數
基於列處理文本-cut
-d
指定分割字符,默認為TAB-f
指定輸出的列號-c
基於字符進行切割,固定長度
例:
cut -d: -f1 /etc/passwd
以:
為分割符,顯示第一列
grep linuxcast /etc/passwd | cut -d: -f3
輸出用戶linuxcast的uid(第三列)
cut -c2-6 /etc/passwd
第2-6個字符
文本統計-wc
-l
只統計行數line-w
只統計單詞word-c
只統計字節數-m
只統計字符數
文本排序-sort
-r
進行倒敘排序-n
基於數字進行排序-f
忽略大小寫-u
刪除重復行-tc
使用c作為分隔符分割為列進行排序-kx
當進行基於指定字符分割為列的排序時,指定基於哪個列排序
刪除重復行
sort -u
排序時刪除重復行uniq
刪除重復的相鄰行
文本比較-diff
-i
忽略大小寫-b
忽略空格數量的改變-u
統一顯示比較信息(一般用以生成patch文件)
diff -u linuxcast linuxcast-new > final.patch
檢查拼寫-aspell
aspell check linuxcast
aspell list < linuxcast
處理文本內容-tr
translate
tr -d ‘TMD‘ < linuxcast
刪除關鍵字tr ‘a-z‘ ‘A-Z‘ < linuxcast
轉換大小寫
搜索替換-sed
使用正則表達式處理文本文件
sed ‘s/linux/unix/g‘ linuxcast
替換linux為unix,/g
全部替換sed ‘1,50s/linux/unix/g‘ linuxcast
替換1-50行sed -e ‘s/linux/unix/g‘ -e ‘s/nash/nash_su/g‘ linuxcast
多個正則表達式sed -f sededit linuxcast
將匹配表達式保存在sededit文件中
Linux入門-7 Linux管道、重定向以及文本處理