筆者最近在使用shell腳本中處理字符串,因此使用了大量shell腳本中的四劍客(awk,grep,sed,cut)而其中使用最多的兩種方法就是grep和awk,因此想總結整理一下。
一、grep的意義
二、grep的基本用法
三、awk的意義
四、awk的基本用法
五、實例說明兩者怎么用
一、grep的意義
首先,grep是用來處理行數據的基本命令集,簡單來說它的使用意義就在於當你想要找到某個文件中的某個字符串以及它相關聯的信息時(比如說行數),那么你就需要這個命令了。
二、grep的基本用法
grep使用的格式為 grep [參數] "模式" 文件
(1)grep的作用域
grep的作用域主要是由最后一個參數文件所決定的,換句話說,如果決定在某個文件中查找字符串,那么直接在后面書寫某個文件即可,而如果在某個文件夾,那么要做兩件事:1、首先需要在參數中加 -r(表示遞歸的意思)。2、在文件參數上加上文件夾。
例如:假設一個文件夾git_reverse目錄中包含一個文件,文件夾中含有文件1.txt,而1.txt中包含字符串66666666,如果現在要搜索字符串6666666666,那么有以下兩種方法:
1、grep NULL "66666666666" (單引號,雙引號,不加引號) 1.txt
2、grep -r "66666666666"(單引號,雙引號,不加引號) git_reverse
無論是哪一種都可以。
(2)grep的參數
grep的參數是grep當中的最大難點,也是不太容易記得部分,我覺得在這里我們可以按照由大到小的順序來進行記憶:
1、首先從最大的進行記憶:是否查找改行前后的n行。此時可以使用
-A(after):表示匹配之后的第n行。
-B(before):表示匹配之前的第n行。
-C(context):表示匹配之前和之后的第n行。
2、接着我們要判斷是不是需要行數:
-n(num):表示判斷當前是否有行數
3、接着我們就要判斷字符串本身了。同樣由大到小進行排列:
1、首先我們要判斷它是否忽略大小寫:
-i(ignore):忽略大小寫
2、接着我們判斷是否只匹配該字符串和不匹配相關的字符串
-o(output):判斷只輸出這個
-v(verse):判斷不輸出這個
3、接着我們可以設置其是否高亮:
--color:顏色
(3)grep的模式匹配
好了,搞清楚這些我們就應該開始研究grep里面僅剩的一個參數“模式”的問題了。其實模式的話主要可以分成兩個部分:第一個的話就是固定模式,換句話說就是你知道相應的字符串,比如我們要搜索某個文件中的6666666這個字符串,那么我們就直接用grep “66666666” 文件就可以了。
看到這里你可能會有一個疑問,那就是grep的引號和shell腳本中用法是一樣的嗎?好的,這里我們要說一下grep中引號的用法。首先,我們要知道grep中單引號,雙引號和不加引號三種方法。首先要明確的一點是:這三種方式在一定程度上是可以轉換使用的。比如上面我搜索的666666666,無論是單引號和雙引號都是可以的。因此我們這里主要談一下三者的區別。
首先說一下加引號(單引號和雙引號都算上)和不加引號的區別。這個主要應用於空格上面。換句話說如果你搜索的文本中包含空格,那么你就必須加引號。(這個應該也比較好理解,因為grep命令是默認過濾空格的)。
接着我們說一下單引號和雙引號。這個的用法和shell腳本基本相同,也就是說如果我們定義一個a=“var”,那么我們要搜索這個var這個字符串,就必須用“$a”,而如果我們使用了'$a',那么我們搜索出來的結果就是$a,這是因為$符本身就是系統保留字,系統是識別這個字的,但是如果換一個字,比如^,這個字符系統是不認的,那么它單引號和雙引號是一樣的。
好了,回到之前的話題,如果我們我知道我們具體要搜索哪個字符,只是知道一個搜索字符的大致范圍該怎么辦呢?那么這里我們就要用到正則表達式了。
正則表達式可以分成兩個部分,一個是確定字符的位置關系,還有一個是確定字符的出現數量和范圍。
(1)位置關系
確定正則表達式的位置關系有兩個,一個是^(表示以.......開頭),用法為t^,表示匹配以t為開頭的用法。另一個是以$(表示以.........結尾),用法為t$(正則表達式都是匹配前面的)。
(2)數量關系
這里主要說兩個字符,一個是*,它表示之前的字符從0次到無數次,比如比如,zo*可以匹配z或者zoo,另外還有一個就是.,他就是占位符,他會顯示本身可以匹配任何字符。例如:zo.可以匹配zoe,zor等等。另外還有一個符號就是{,可以用來匹配出現的個數,比如o{2,}就可以表示o出現兩次的問題。
(3)匹配范圍
這里主要介紹一下[符號,它表示里面的內容范圍,比如如果我們要匹配字母,可以這樣[a-z],同理如果我們要匹配數字,可以寫[0-9]等等。
(4)和其他命令的合用
grep可以和很多命令合用,只要你想抓取數據信息,你就可以用grep。比如cat XXX | grep XXX
總結一下,本篇文章一共介紹了4個部分:
(1)介紹了grep命令的使用場景,簡單來說就是查找文件中的字符串使用。
(2)介紹了grep命令輸出字符串的相關參數的作用。簡單來說就是控制字符串的作用域,行數,大小寫,以及前后部分輸出
(3)介紹了grep命令中單引號,雙引號,不加引號的區別。簡單來說單引號和雙引號區別就是可不可以替換,加不加引號區別在於你要查找的字符串前后是否有空格。
(4)介紹了grep命令中常用的正則表達式。按照位置有^和$,按照數量有"*"和".",按照匹配范圍有[]。
今天就先寫道這,下次寫awk命令。