Linux運維相關(六)
學習Linux運維過程中的心得體會以及知識點的整理,方便我自己查找,也希望可以和大家一起交流。
—— grep 家族 ——
-
1.grep
- grep 是使用最廣泛的命令之一,用來對文本文件內容按行進行模式匹配查找。如果找到匹配模式的行, grep 將打印包含模式的行。
- grep 有三種變形:
- ① Grep : 標準 grep 命令,主要討論此格式。
- ② Egrep: 擴展 grep,支持基本及擴展的正則表達式。
- ③ Fgrep: 快速 grep,允許查找字符串而不是一個模式。這裏的"快速"並不是指速度快。
-
2.grep 的用法
- grep Usage: grep [OPTION] regular_expressions [filename1 …]
- ① regular_expressions : 是正則表達式,一般用單引號把正則表達式括起來。當然,也可以不使用正則表 達式而使用字符串,使用字符串時一般用雙引號把字符串括起來。
- ② filename1 … : 文件名列表,grep 將對這些指定的文件的內容進行匹配查找,如果文件名列表省略, grep 將從標準輸入讀取要匹配查找的內容。
- grep 的常用選項:
- -c 只輸出匹配的行的總數(count)。
- -i 不區分大小寫(只適用於單字符)。
- -h 查詢多個文件時,不顯示文件名。
- -l 查詢多個文件時,只輸出包含匹配模式的文件的文件名。
- -n 顯示匹配的行及行號。
- -s 不顯示不存在或無匹配文件等錯誤信息(silence)。
- -v 只顯示不包含匹配模式的行。
- grep Usage: grep [OPTION] regular_expressions [filename1 …]
-
3.grep 應用舉例
- 查詢多個文件,可以使用*。比如:
grep "sort" *.doc
// 在所有以 doc 爲後綴的文件中查找字符串"sort"grep "linux" *
// 在當前目錄下的所有文件中查找字符串"linux"
- 精確匹配,可以在要匹配的字符串後加>。
grep "48\>" data.f
// 可以匹配 48、1248、c48 This 等而不能匹配 481、c480
- 反轉匹配
ps aux | grep "httpd" | grep -v "grep"
// 查看正在運行的 httpd 進程
- 匹配空行
grep -n '^$' myfile
// 打印文件 myfile 中空行的行號grep -v '^$' myfile
// 去除文件 myfile 中的空行
- 查詢多個文件,可以使用*。比如:
-
4.grep 可以使用或匹配模式的類名形式
- 常見的匹配模式的類名形式:
[[:upper:]] 等價於 [A-Z] [[:lower:]]
等價於[a-z] [[:digit:]]
等價於[0-9] [[:alnum:]]
等價於[0-9a-zA-Z] [[:space:]]
- 舉例:
grep '5[[:upper:]][[:upper:]]' data.f
// 可以匹配包括 5AP196、5DF540 的行
- 常見的匹配模式的類名形式:
-
5.可以把要匹配的模式寫到一個文件中,然後使用 -f 選項,將該未能傳給 grep。
egrep -f grappats data.f
// 要匹配的模式存放在文件 grappats 中
-
6.可以在 grep 的模式字符串中使用(|)符號,意即“|”符號兩邊之一或全部,可以使用任意多"|",可同時使用 ^符號排除字符串
who | grep '(zqf|zqc|zqx)'
// 查看是否 zqf zqc zqx 三者中是否有在線的
-
7.如果傳遞給 grep 的文件名參數是不是一個普通文件而是一個目錄的話,要使用"-d"選項。
- Usage: grep -d [ACTION] directory_name
- ACTION : ACTION 用來指定對作爲輸入文件的目錄文件的處理方式,ACTION 有 3 個可選值:
- ① read : 把目錄文件當作普通文件來讀取,是選項省略時的默認方式。
- ② skip : 目錄將被忽略而跳過
- ③ recurse : grep 以遞歸的方式讀取目錄下的每一個文件。等同於選項 “-r” 。
- 舉例:
grep -rl "eth0" /etc
// 查看/etc 目錄中於"eth0"有關的文件的文件名