文字三劍客

2021-08-17 11:35:30 字數 2655 閱讀 2631

檔案萬用字元和正規表示式

文字過濾工具grep

linux系統中,一切皆檔案。強大的文字編輯和處理工具便必不可少了,在linux系統中,有文字處理三劍客:grep,sed,awk。

在進行介紹三大工具前,我們先總結一下檔案萬用字元和正規表示式。檔案萬用字元主要就是對檔案的查詢進行檔名的模糊查詢,而正規表示式是對檔案內的文字進行查詢和匹配,之後交給工具去處理。他們的主要區別如下:

文字過濾工具grep

grep(global search regular expression(re) and print out the line,全面搜尋正規表示式並把行列印出來)是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來.

grep的主要引數如下:

示例

在centos7中,定義了別名:grep= "grep --color=auto「,所以我們使用grep是搜尋的關鍵字會高亮顯示。

我們想要找到/etc/passwd檔案內的全部全部root,我們可以使用grep 『root』 /etc/passwd  這條命令實現。效果如下:

想要過濾的資訊被高亮顯示了。

grep使用格式

grep 【選項】 想要過濾的單詞或正規表示式   檔名,下面一張圖詳解grep命令的使用格式。

一般一條命令分為這四部分,我們還想要進一步處理的話,可以接管道,繼續處理文字內容,當然內容部分我們可以使用正規表示式去表示,這正是他們的強大之處。

下面我們來看具體引數的應用,首先是-v 反向搜尋,也就是說,我們可以把過濾到的內容不顯示出來,而顯示那些沒被過濾到的內容,具體如下:

我們清晰的看到,這兩條命令加起來的內容就是passwd文件全部內容了。

下面看一下

-n選項的效果,這個選項的功能是將匹配到的內容的行號顯示出來,效果如下圖:

-c 選項會只顯示匹配到了幾行內容,不顯示具體匹配的內容:

-o 選項只顯示皮ip誒到的字串,這樣方便我們複製給變數 :

-q 是靜默輸出,也就是說什麼也不顯示,但命令的返回值是成功,也就是說我們不想要看到結果時,便可以用這個選項。

-e 支援兩個條件同時過濾 :

grep -e = egrep  這個是使用擴充套件正規表示式來過濾想要的內容。

grep還有很多選項,這裡就不一一枚舉了,大家可根據文章開頭的選項簡介和系統自帶的man手冊檢視具體的功能和引數。

sed是一種流編輯器,它是文字處理中非常中的工具,能夠完美的配合正規表示式使用,功能不同凡響。處理時,把當前處理的行儲存在臨時緩衝區中,稱為「模式空間」(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有 改變,除非你使用重定向儲存輸出。sed主要用來自動編輯乙個或多個檔案;簡化對檔案的反覆操作;編寫轉換程式等。

引數

動作列表:

動作示例:

a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)

c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行

d :刪除,因為是刪除啊,所以 d 後面通常不接任何咚咚

i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行

p :列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起執行

s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法

sed還有高階用法

示例

sed '1!g;h;$!d' file

逆向顯示檔案內容

文字三劍客 sed

sed是linux中支援正規表示式的流編輯器 作用 修改和替換文字 sed擁有兩個兩個空間,分別是pattern space和hold space pattern space是處理資料的地方 注意 每處理一行資料後,模式空間就會清空 hold space是臨時存放資料的地方 模式空間 pattern...

文字三劍客 gawk基礎

gawk程式是unix中原始awk程式的gnu版本。gawk程式讓流編輯器邁上了乙個新的台階,它提供了一種程式語言而不只是編輯器命令。在gawk程式語言中,可以完成下面的事情 1 定義變數來儲存資料 2 使用算數和字串操作符來處理資料 3 使用結構化程式設計概念 比如if then語句和迴圈 來為資...

文字三劍客之sed

sed是一種流編輯器,能夠完美的配合正規表示式使用。處理時,把當前處理的行儲存在臨時緩衝區中,稱為 模式空間 pattern space 接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有改變,除非你使用重定向儲存輸出。...