這幾個工具是shell中很是好用的文本流處理工具,能夠進行查找,編輯或者分析等工做,它們都支持正則表達式,也支持使用shell內置的變量html
grep是一個字符串比較工具,用於從文件中提取知足條件的行,條件的部分能夠使用正則表達式
$grep [-ABrn] [str] FilePathOrDirPath
VS $find [路徑] [選項] [參數]
-A [n]
#除了該行以外,也列出後續的n行
-B [n]
#除了該行以外,也列出以前的n行
-n
#顯示行號
-r
#遞歸查找全部的目錄
示例文檔正則表達式
$ cat -n test_grep 1 #include<stdio.h> 2 int main(){ 3 printf("hello,world!"); 4 } 5 6 7 角標 8 見後文[^1] 9 10 [^1]:This the first footnote 11
栗子, 找到符合模式[a-g](的行:shell
$ grep '[a-g](' test_grep printf("hello,world!");
sed是一個文本流編輯工具,對文件流以行爲單位進行替換,刪除,新增,提取等操做
$sed [-nefri] [n1[, n2]] [function] [字符串]
-n
只列出通過sed特殊處理的那一行
-e
直接使用命令行對文本流進行編輯,即便用function
-f
直接將sed編輯好的文本流寫入一個文件
-i
直接編輯文件內容,不在屏幕輸出
function的內容:工具
a\ :add, 將後接的字符串添加到[n1,n2]的下一行
c: change,,用後接的字符串替代[n1, n2]之間的行
d :delete, 刪除n1, n2之間的行
i\ :insert, 將後接的字符串添加到[n1, n2]的上一行
p:print打印,一般和-n一同使用
s:search,取代
栗子,將示例文件全部的main()變成main(void),顯示1到4行,注意若是使用行號表示處理的內容,能夠直接在後面接p,a\等命令,若是使用字符串,須要使用//
將字符串和命令隔離開:命令行
$ sed -e 's/main()/main(void)/' test_grep|sed -n '1,4p' #include<stdio.h> int main(void){ printf("hello,world!"); }
awk既是一門語言也是一個文本流處理工具,這裏咱們只說做爲命令的awk,awk是對文本流以字段爲單位進行替換,刪除,新增,提取等操做的工具, 默認的字段的分隔符爲」tab「或」空格「,能夠使用-F來從新指定
$awk [-Ffv]'條件類型1{動做1}條件類型2{動做2}...' filename
-F
表示從新設置分隔符,awk的默認分隔符是tab或空格,不過不指定,是這樣的:code
$ last -n 3 jiang pts/0 :0 Mon Sep 19 17:34 still logged in jiang pts/0 :0 Mon Sep 19 16:50 - 16:50 (00:00) jiang pts/0 :0 Mon Sep 19 16:29 - 16:43 (00:14) $ last -n 4|awk '{print $1}' jiang jiang jiang jiang
若是指定了以「M」爲分隔符`:htm
$ last -n 3|awk -F 'M' '{print $1}' jiang pts/0 :0 jiang pts/0 :0 jiang pts/0 :0
awk有三個內建變量來表示處理的行有的數據信息:
NF 每一行擁有的字段總數
NR 目前awk所處理的是第幾行的數據
FS 目前的分隔字符,默認是"空格"
能夠使用>, <, >=, <=, ==, != 來作邏輯判斷blog