天天看點

# 聊一聊悟空編輯器 #linux指令講解

grep指令1、作用:

Linux系統中grep指令是一種強大的文本搜尋工具,它能使用多種選項及正規表達式搜尋文本,并把比對的行列印出來。grep全稱是Global Regular Expression Print,表示全局正規表達式列印,它的使用權限是所有使用者。

2、文法:

grep [option...] [patterns] [file...]

可以有零個或多個選項參數,以及零個或多個檔案參數。patterns參數包含一個或多個由|分隔的模式,當通過“-e patterns”或“-f file”選項給出模式時,将忽略該參數。當在shell指令中使用grep時,通常應該引用模式。3、常用選項:

-E :開啟擴充(Extend)的正規表達式。

-i :忽略大小寫(ignore case)。

-v :反過來(invert),隻列印沒有比對的,而比對的反而不列印。

-n :顯示行号

-w :被比對的文本隻能是單詞,而不能是單詞中的某一部分,如文本中有liker,而搜尋的是like,就可以使用-w選項來避免比對liker

-c :顯示總共有多少行被比對到了,而不是顯示被比對到的内容,注意如果同時使用-cv選項是顯示有多少行沒有被比對到。

-o :隻顯示被模式比對到的字元串。

–color :将比對到的内容以顔色高亮顯示。

-A n:顯示比對到的字元串所在的行及其後n行,after

-B n:顯示比對到的字元串所在的行及其前n行,before

-C n:顯示比對到的字元串所在的行及其前後各n行,context

4、基本正規表達式

  1. 1比對字元:

. :任意一個字元。[abc] :表示比對一個字元,這個字元必須是abc中的一個。

[a-zA-Z] :表示比對一個字元,這個字元必須是a-z或A-Z這52個字母中的一個。

[^123] :比對一個字元,這個字元是除了1、2、3以外的所有字元。

對于一些常用的字元集,系統做了定義:

[A-Za-z] 等價于 [[:alpha:]]

[0-9] 等價于 [[:digit:]]

[A-Za-z0-9] 等價于 [[:alnum:]]

tab,space 等空白字元 [[:space:]]

[A-Z] 等價于 [[:upper:]]

[a-z] 等價于 [[:lower:]]

标點符号 [[:punct:]]

5、常見使用示例

  1. 1 示例1

搜尋日志檔案中是否存在錯誤資訊,假如錯誤資訊的關鍵字是"error",可以使用如下指令grep error test.log

  1. 2 示例2

如果搜尋的字元串不包含空格則可以不需要引号,如果包含空格,則需要使用雙引号或者單引号包起來。

  1. 3 示例3

搜尋目錄下所有檔案,包含子檔案夾,加上-r參數即可grep -r "xxxxxx" *

  1. 4 示例4

搭配其他指令一起使用,比如:搭配tailf指令實時搜尋相關字元串,搭配ps指令搜尋相關程序是否啟動。tailf xxx.log | grep "good"

ps -ef | grep "goodprocess"

  1. 5 示例5

搜尋曆史日志檔案,但是曆史日志檔案被打包成gz檔案了,全部解壓出來再使用grep搜尋就太麻煩了,這時可以使用zgrep。zgrep -a "good" xxxx.tar.gz

  1. 6 示例6

搜尋不固定的字元串,但是這些字元串有一定的規律,這時可以使用正規表達式。假如日志中的日期格式為1009-123030,想要搜尋12點到13點的日志,則可使用如下指令grep "1009-1[2-3][[:digit:]]\{4\}" test.log

grep -E "1009-1[2-3][[:digit:]]{4}" test.log

egrep "1009-1[2-3][[:digit:]]{4}" test.log

這3種方式都可以

  1. 7 示例7

如果搜出來的日志比較多,全部列印出來無法閱讀,那麼可以将其存到一個檔案中。egrep "1009-1[2-3][[:digit:]]{4}" test.log > 1213.log

  1. 8 示例8
32