如何高效的記住 Linux grep 命令的參數?

前言

grep 功能十分強大,讓人愛不釋手,但是,正因為功能太過強悍導致 grep 參數十分繁多,讓人難以掌握,本文解決的痛點是---如何從嘈雜的參數中取其精華去其"糟粕",抓住要害,從而事半功倍。

1、grep 簡介

grep 是一款強大的文本搜索工具,它能使用特定模式(包括正則表達式)搜索文本,並默認輸出匹配行。

grep 是 "Globally search a Regular Expression and Print" 的縮寫,含義是:全局搜索正則表達式和打印。之所以強調 "全局",是因為它可以同時對多個文件進行搜索。

2、grep 工作方式

grep的工作方式是這樣的,它在一個或多個文件中搜索字符串模板。如果模板包括空格,則必須被引用,模板後的所有字符串被看作文件名。搜索的結果被送到屏幕,不影響原文件內容。

備註:若不指定任何文件名稱,或是所給予的文件名為 -,則 grep 命令會從標準輸入設備讀取數據。

例如:grep ".*error" system.log。該命令將在文件 system.log 中搜索,顯示出包含帶有字符串 error 的每一行。命令行中的點表示的是 error 之前可以有任意字符,星號指的是點號所表示的任意字符可以有任意個,其中的雙引號是可有可無的,但是當語句中包含短語或者空格時就必須加雙引號。

3、grep 命令格式

grep命令的常用格式為:

如何高效的記住 Linux grep 命令的參數?

grep 命令的格式

4、grep 命令常用選項

如何高效的記住 Linux grep 命令的參數?

grep 命令常用選項

5、grep 命令模式部分

grep 命令的模塊部分,既可以輸入字符串,也可以使用正則表達式。正則表達式是一組由字母和符號組成的特殊文本,它可以用來從文本中找出滿足你想要的格式的句子。總之,grep 命令的模塊部分有下面兩種情況:

(1)直接輸入要匹配的字符串

(2)使用基本正則表達式,正則表達式主要依賴於元字符。 元字符不代表它們本身的字面意思,它們都有特殊的含義。一些元字符寫在方括號中的時候有一些特殊的意思。以下是一些元字符的介紹:

如何高效的記住 Linux grep 命令的參數?

正則表達式 - 元字符

6、grep 命令實戰

查找日誌文件的 502 錯誤:

如何高效的記住 Linux grep 命令的參數?

grep 實戰

如何高效的記住 Linux grep 命令的參數?

查找502網關錯誤的日誌記錄

7、如何記憶 grep 的參數?

(1)牢記 ABC 這三個參數。可以通過聯想的方式去記憶。ABC的含義十分廣泛。例如:美國廣播公司,英文全稱:American Broadcasting Corporation, 簡稱ABC,總部在紐約,是美國三大商業廣播電視公司之一。還有,中國農業銀行全稱為:Agricultural Bank Of China,也簡稱ABC。

(2)牢記 wc 這兩個參數。可以聯想到 wc 命令,其用於統計給定文件中的字節數、字數、行數。

(3)還要明白 or 和 and 兩種邏輯。

其實,在 grep 命令中,並沒有 or 和 and 這兩種操作符,不過這倒是難不倒我們,窮則變,變則通,我們完全可以通過其他方式實現相同的目的。如下文所述。

可以使用 '|' 來分割多個pattern,以此實現 or 的操作。但是,在某些機器上,要使用 -E 參數才能夠進行邏輯匹配,如下所示:

如何高效的記住 Linux grep 命令的參數?

greb 的 or 和 and 操作

備註:grep -E 選項表示使用的是擴展正則表達式。 正則式分為普通版和擴展版,兩者大同小異。以後有機會了再給大家講述一下吧,此文不再贅述。

grep 命令本身不提供 and 功能,但是可以通過這種形式實現 and 邏輯:

如何高效的記住 Linux grep 命令的參數?

grep and 邏輯的實現

8、小結

雖然 grep 命令的參數眾多,但是核心的參數並不多,採用想象和聯想的方式,十分有助於記憶,記得深,記得牢,不容易忘記。想象和聯想就是非線性思維方式的重要體現。

可是,在各種 shell 書籍和博客中,往往採用的都是線性思維的學習方式就是:給出一個命令介紹,後面跟上實例介紹,採用的是“學->用”的思維模式。這種“注重內容的收錄,忽視思維過程”的學習方式註定的低效的。

備註:本文源自《趣談shell》,用非線性思維學習shell,讓天下沒有難學的shell。


分享到:


相關文章: