Linux三劍客grep、awk和sed
阿新 • • 發佈:2021-01-19
grep,sed 和 awk是Linux/Unix 系統中常用的三個文字處理的命令列工具,稱為文字處理三劍客。本文將簡要介紹這三個命令並給出基本用法。
# 管道
在介紹這兩個命令之前,有必要介紹一下Unix/Linux中管道(pipe)的概念。管道將一個命令/程式/程序的輸出傳送到另一個命令/程式/程序,以進行進一步處理。是一種程序間通訊機制,使用管道符"|”將兩個命令隔開,管道符左邊命令的輸出就會作為管道符右邊命令的輸入。
![](https://img2020.cnblogs.com/blog/2229336/202101/2229336-20210105222003983-325611771.png)
管道實現了資料在多個命令之間傳遞,不需要建立臨時檔案來傳遞,它是單向的,資料通過管道從左向右流動。
例項1:
`cat test.txt | grep test1`
```bash
# cat test.txt | grep test1
test1
test111
test3 test1
test111
# cat test.txt | grep test1 | grep test3
test3 test1
#
```
例項2:
```bash
# cat test.txt | head -3
test1
test2
test3
# cat test.txt | tail -5
test
test
test
rrrr
#
```
# grep
## 定義
grep(Global Regular Expression Print) 命令用於搜尋檔案的特定模式,它不能增加、修改、刪除文字內容,通常用於搜尋過濾文字,顯示被模式匹配到的行。使用正則表示式進行文字匹配(正則表示式參考文章**《Python正則表示式》**),它的使用許可權是所有使用者。
命令形式:
`grep [OPTIONS] PATTERN [FILE...]`
擴充套件正則表示式(rgrep)新增 `-E` 引數:
`grep -E [OPTIONS] PATTERN [FILE...]`
## 選項引數
* -v 或 --invert-match : 顯示不被 pattern匹配到的行
* -n 或 --line-number : 顯示匹配的行號
* -o 或 --only-matching :僅顯示匹配到的字串
* -c 或 --count : 統計匹配的行數
* -i 或 --ignore-case :忽略字元大小寫
* -m或--max-count:`-m 1` ,匹配到1行後停止匹配
* -A<顯示行數> 或 --after-context=<顯示行數> : 除了顯示符合範本樣式的那一列之外,並顯示該行之後的內容。
* -B<顯示行數> 或 --before-context=<顯示行數> : 除了顯示符合樣式的那一行之外,並顯示該行之前的內容。
## 例項1:查詢檔案內容,顯示行號
查詢檔案內容包含'test1'的行,顯示行數
```bash
# grep -n test1 test.txt
1:test1
7:test111
9:test3 test1
11:test111
# grep -o test1 test.txt
test1
test1
test1
test1
# grep -no test1 test.txt
1:test1
7:test1
9:test1
11:test1
```
## 例項2:查詢檔案內容,不包含test1的行
```bash
# grep -nv test1 test.txt
2:test2
3:test3
4:test4
5:test5
6:test6
8:test2
10:test
```
## 例項3:grep 正則表示式
查詢test1開頭的行
```bash
# grep -n ^test1 test.txt
1:test1
7:test111
11:test111
```
查詢以1結尾的行
```bash
# grep -n 1$ test.txt
1:test1
7:test111
9:test3 test1
11:test111
```
## 檢視程序
```bash
# ps -aux | grep chrome
root 5425 0.4 1.8 869280 34200 pts/0 Sl Dec22 11:31 /opt/google/chrome/chrome --no-sandbox
root 5439 0.0 0.0 563592 1132 pts/0 S Dec22 0:00 /opt/google/chrome/chrome --type=zygote --no-zygote-sandbox --no-sandbox
root 5440 0.0 0.1 563592 2836 pts/0 S Dec22 0:06 /opt/google/chrome/chrome --type=zygote --no-sandbox
root 5441 0.0 0.0 26452 208 pts/0 S Dec22 0:00 /opt/google/chrome/nacl_helper --no-sandbox
root 5442 0.0 0.0 26452 144 pts/0 S Dec22 0:00 /opt/google/chrome/nacl_helper --no-sandbox
```
# sed
## 定義
sed(Stream Editor)是一種流編輯器,一次處理一行內容,將行儲存在模式空間(臨時緩衝區),然後用sed命令處理模式空間中的內容,處理完成後將內容送入螢幕,然後清除模式空間,繼續讀入下一行,執行下一個迴圈,直到檔案末尾。這個過程中不會改變檔案內容(除了 `-i` 選項)。
命令形式:
`sed [選項] [sed命